Merge remote-tracking branch 'Polarsys/neon' into 562302-Implement-unit-tests-for-existing-features
diff --git a/.gitignore b/.gitignore
index 01da01d..78db911 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,5 @@
 plugins/fla/org.polarsys.chess.xtext.fladsl.ui/xtend-gen/org/polarsys/chess/xtext/ui/labeling/.FlaDslLabelProvider.xtendbin
 plugins/fla/org.polarsys.chess.xtext.fladsl.ui/xtend-gen/org/polarsys/chess/xtext/ui/outline/.FlaDslOutlineTreeProvider.xtendbin
 plugins/fla/org.polarsys.chess.xtext.fladsl.ui/xtend-gen/org/polarsys/chess/xtext/ui/quickfix/.FlaDslQuickfixProvider.xtendbin
+/plugins/fla/org.polarsys.chess.xtext.fladsl/xtend-gen
+/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/xtend-gen
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/.classpath b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/.classpath
index bc001b4..29ba398 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/.classpath
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/.classpath
@@ -1,9 +1,9 @@
-<?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="src" path="src-gen"/>
-	<classpathentry kind="src" path="xtend-gen"/>
-	<classpathentry kind="output" path="bin"/>
-</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-1.8"/>

+	<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-gen"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/META-INF/MANIFEST.MF b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/META-INF/MANIFEST.MF
index 6252526..4a71ac4 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/META-INF/MANIFEST.MF
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/META-INF/MANIFEST.MF
@@ -1,30 +1,30 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: org.polarsys.chess.xtext.fladsl.ui
-Bundle-Vendor: Intecs
-Bundle-Version: 1.0.0.qualifier
-Bundle-SymbolicName: org.polarsys.chess.xtext.fladsl.ui;singleton:=true
-Bundle-ActivationPolicy: lazy
-Require-Bundle: org.eclipse.xtext.ui,
- org.eclipse.ui.editors;bundle-version="3.8.200",
- org.eclipse.ui.ide;bundle-version="3.10.0",
- org.eclipse.xtext.ui.shared,
- org.eclipse.ui,
- org.eclipse.xtext.builder,
- org.eclipse.xtext.common.types.ui,
- org.eclipse.xtext.ui.codetemplates.ui,
- org.eclipse.compare,
- org.eclipse.xtext.xbase.lib,
- org.eclipse.uml2.uml.editor;bundle-version="5.0.1",
- org.polarsys.chess.xtext.fladsl,
- org.antlr.runtime
-Import-Package: org.apache.log4j,
- org.eclipse.xtext.xbase.lib
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.polarsys.chess.xtext.ui.contentassist.antlr,
- org.polarsys.chess.xtext.ui.internal,
- org.polarsys.chess.xtext.ui,
- org.polarsys.chess.xtext.ui.contentassist,
- org.polarsys.chess.xtext.ui.quickfix,
- org.polarsys.chess.xtext.ui.contentassist.antlr.internal
-Bundle-Activator: org.polarsys.chess.xtext.ui.internal.FlaDslActivator
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: org.polarsys.chess.xtext.fladsl.ui

+Bundle-Vendor: Intecs

+Bundle-Version: 1.0.0.qualifier

+Bundle-SymbolicName: org.polarsys.chess.xtext.fladsl.ui;singleton:=true

+Bundle-ActivationPolicy: lazy

+Require-Bundle: org.eclipse.xtext.ui,

+ org.eclipse.ui.editors;bundle-version="3.8.200",

+ org.eclipse.ui.ide;bundle-version="3.10.0",

+ org.eclipse.xtext.ui.shared,

+ org.eclipse.ui,

+ org.eclipse.xtext.builder,

+ org.eclipse.xtext.common.types.ui,

+ org.eclipse.xtext.ui.codetemplates.ui,

+ org.eclipse.compare,

+ org.eclipse.xtext.xbase.lib,

+ org.eclipse.uml2.uml.editor;bundle-version="5.0.1",

+ org.polarsys.chess.xtext.fladsl,

+ org.antlr.runtime

+Import-Package: org.apache.log4j,

+ org.eclipse.xtext.xbase.lib

+Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Export-Package: org.polarsys.chess.xtext.ui,

+ org.polarsys.chess.xtext.ui.contentassist,

+ org.polarsys.chess.xtext.ui.quickfix,

+ org.polarsys.chess.xtext.ui.internal,

+ org.polarsys.chess.xtext.ui.contentassist.antlr,

+ org.polarsys.chess.xtext.ui.contentassist.antlr.internal

+Bundle-Activator: org.polarsys.chess.xtext.ui.internal.FlaDslActivator

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/plugin.xml_gen b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/plugin.xml_gen
index d179911..125b903 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/plugin.xml_gen
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/plugin.xml_gen
@@ -1,425 +1,425 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<plugin>
-
-    <extension
-            point="org.eclipse.ui.editors">
-        <editor
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
-            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
-            default="true"
-            extensions="fladsl"
-            id="org.polarsys.chess.xtext.FlaDsl"
-            name="FlaDsl Editor">
-        </editor>
-    </extension>
-    <extension
-        point="org.eclipse.ui.handlers">
-        <handler
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
-            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
-            <activeWhen>
-                <reference
-                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-                </reference>
-            </activeWhen>
-        </handler>
-        <handler
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
-            commandId="org.polarsys.chess.xtext.FlaDsl.validate">
-         <activeWhen>
-            <reference
-                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-            </reference>
-         </activeWhen>
-      	</handler>
-      	<!-- copy qualified name -->
-        <handler
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedNameHandler"
-            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName">
-            <activeWhen>
-				<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />
-            </activeWhen>
-        </handler>
-        <handler
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedNameHandler"
-            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName">
-            <activeWhen>
-            	<and>
-            		<reference definitionId="org.polarsys.chess.xtext.FlaDsl.XtextEditor.opened" />
-	                <iterate>
-						<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
-					</iterate>
-				</and>
-            </activeWhen>
-        </handler>
-    </extension>
-    <extension point="org.eclipse.core.expressions.definitions">
-        <definition id="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-            <and>
-                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
-                <with variable="activeEditor">
-                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
-                        value="org.polarsys.chess.xtext.FlaDsl" 
-                        forcePluginActivation="true"/>
-                </with>        
-            </and>
-        </definition>
-        <definition id="org.polarsys.chess.xtext.FlaDsl.XtextEditor.opened">
-            <and>
-                <reference definitionId="isXtextEditorActive"/>
-                <with variable="activeEditor">
-                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
-                        value="org.polarsys.chess.xtext.FlaDsl" 
-                        forcePluginActivation="true"/>
-                </with>        
-            </and>
-        </definition>
-    </extension>
-    <extension
-            point="org.eclipse.ui.preferencePages">
-        <page
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
-            id="org.polarsys.chess.xtext.FlaDsl"
-            name="FlaDsl">
-            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-        </page>
-        <page
-            category="org.polarsys.chess.xtext.FlaDsl"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
-            id="org.polarsys.chess.xtext.FlaDsl.coloring"
-            name="Syntax Coloring">
-            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-        </page>
-        <page
-            category="org.polarsys.chess.xtext.FlaDsl"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
-            id="org.polarsys.chess.xtext.FlaDsl.templates"
-            name="Templates">
-            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-        </page>
-    </extension>
-    <extension
-            point="org.eclipse.ui.propertyPages">
-        <page
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
-            id="org.polarsys.chess.xtext.FlaDsl"
-            name="FlaDsl">
-            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-            <enabledWhen>
-	            <adapt type="org.eclipse.core.resources.IProject"/>
-			</enabledWhen>
-	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
-        </page>
-    </extension>
-    <extension
-        point="org.eclipse.ui.keywords">
-        <keyword
-            id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"
-            label="FlaDsl"/>
-    </extension>
-    <extension
-         point="org.eclipse.ui.commands">
-      <command
-            description="Trigger expensive validation"
-            id="org.polarsys.chess.xtext.FlaDsl.validate"
-            name="Validate">
-      </command>
-      <!-- copy qualified name -->
-      <command
-            id="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
-            categoryId="org.eclipse.ui.category.edit"
-            description="Copy the qualified name for the selected element"
-            name="Copy Qualified Name">
-      </command>
-      <command
-            id="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"
-            categoryId="org.eclipse.ui.category.edit"
-            description="Copy the qualified name for the selected element"
-            name="Copy Qualified Name">
-      </command>
-    </extension>
-    <extension point="org.eclipse.ui.menus">
-        <menuContribution
-            locationURI="popup:#TextEditorContext?after=group.edit">
-             <command
-                 commandId="org.polarsys.chess.xtext.FlaDsl.validate"
-                 style="push"
-                 tooltip="Trigger expensive validation">
-            <visibleWhen checkEnabled="false">
-                <reference
-                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-                </reference>
-            </visibleWhen>
-         </command>  
-         </menuContribution>
-         <!-- copy qualified name -->
-         <menuContribution locationURI="popup:#TextEditorContext?after=copy">
-         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName" 
-         		style="push" tooltip="Copy Qualified Name">
-            	<visibleWhen checkEnabled="false">
-                	<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />
-            	</visibleWhen>
-         	</command>  
-         </menuContribution>
-         <menuContribution locationURI="menu:edit?after=copy">
-         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
-            	style="push" tooltip="Copy Qualified Name">
-            	<visibleWhen checkEnabled="false">
-                	<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />
-            	</visibleWhen>
-         	</command>  
-         </menuContribution>
-         <menuContribution locationURI="popup:org.eclipse.xtext.ui.outline?after=additions">
-			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName" 
-				style="push" tooltip="Copy Qualified Name">
-         		<visibleWhen checkEnabled="false">
-	            	<and>
-	            		<reference definitionId="org.polarsys.chess.xtext.FlaDsl.XtextEditor.opened" />
-						<iterate>
-							<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
-						</iterate>
-					</and>
-				</visibleWhen>
-			</command>
-         </menuContribution>
-    </extension>
-    <extension point="org.eclipse.ui.menus">
-		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
-			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
-				<visibleWhen checkEnabled="false">
-                	<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-                	</reference>
-            	</visibleWhen>
-			</command>
-		</menuContribution>
-	</extension>
-	<extension point="org.eclipse.ui.handlers">
-	    <handler
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
-            commandId="org.eclipse.xtext.ui.editor.FindReferences">
-            <activeWhen>
-                <reference
-                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-                </reference>
-            </activeWhen>
-        </handler>
-    </extension>   
-
-<!-- adding resource factories -->
-
-	<extension
-		point="org.eclipse.emf.ecore.extension_parser">
-		<parser
-			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
-			type="fladsl">
-		</parser>
-	</extension>
-	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
-        <resourceServiceProvider
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
-            uriExtension="fladsl">
-        </resourceServiceProvider>
-    </extension>
-
-
-	<!-- marker definitions for org.polarsys.chess.xtext.FlaDsl -->
-	<extension
-	        id="fladsl.check.fast"
-	        name="FlaDsl Problem"
-	        point="org.eclipse.core.resources.markers">
-	    <super type="org.eclipse.xtext.ui.check.fast"/>
-	    <persistent value="true"/>
-	</extension>
-	<extension
-	        id="fladsl.check.normal"
-	        name="FlaDsl Problem"
-	        point="org.eclipse.core.resources.markers">
-	    <super type="org.eclipse.xtext.ui.check.normal"/>
-	    <persistent value="true"/>
-	</extension>
-	<extension
-	        id="fladsl.check.expensive"
-	        name="FlaDsl Problem"
-	        point="org.eclipse.core.resources.markers">
-	    <super type="org.eclipse.xtext.ui.check.expensive"/>
-	    <persistent value="true"/>
-	</extension>
-
-   <extension
-         point="org.eclipse.xtext.builder.participant">
-      <participant
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant"
-            fileExtensions="fladsl"
-            >
-      </participant>
-   </extension>
-   <extension
-            point="org.eclipse.ui.preferencePages">
-        <page
-            category="org.polarsys.chess.xtext.FlaDsl"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
-            id="org.polarsys.chess.xtext.FlaDsl.compiler.preferencePage"
-            name="Compiler">
-            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-        </page>
-    </extension>
-    <extension
-            point="org.eclipse.ui.propertyPages">
-        <page
-            category="org.polarsys.chess.xtext.FlaDsl"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
-            id="org.polarsys.chess.xtext.FlaDsl.compiler.propertyPage"
-            name="Compiler">
-            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-            <enabledWhen>
-	            <adapt type="org.eclipse.core.resources.IProject"/>
-			</enabledWhen>
-	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
-        </page>
-    </extension>
-    <extension point="org.eclipse.ui.menus">
-		<menuContribution locationURI="popup:#TextEditorContext?after=xtext.ui.openDeclaration">
-			<command
-				commandId="org.eclipse.xtext.ui.OpenGeneratedFileCommand"
-				id="org.polarsys.chess.xtext.FlaDsl.OpenGeneratedCode"
-				style="push">
-					<visibleWhen checkEnabled="false">
-						<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />
-					</visibleWhen>
-			</command>
-		</menuContribution>
-	</extension>
-	<extension point="org.eclipse.ui.handlers">
-		<handler
-			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.generator.trace.OpenGeneratedFileHandler"
-			commandId="org.eclipse.xtext.ui.OpenGeneratedFileCommand">
-				<activeWhen>
-					<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />
-				</activeWhen>
-		</handler>
-	</extension>
-
-	<!-- Quick Outline -->
-	<extension
-		point="org.eclipse.ui.handlers">
-		<handler 
-			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
-			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
-			<activeWhen>
-				<reference
-					definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-				</reference>
-			</activeWhen>
-		</handler>
-	</extension>
-	<extension
-		point="org.eclipse.ui.commands">
-		<command
-			description="Open the quick outline."
-			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
-			name="Quick Outline">
-		</command>
-	</extension>
-	<extension point="org.eclipse.ui.menus">
-		<menuContribution
-			locationURI="popup:#TextEditorContext?after=group.open">
-			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
-				style="push"
-				tooltip="Open Quick Outline">
-				<visibleWhen checkEnabled="false">
-					<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened"/>
-				</visibleWhen>
-			</command>
-		</menuContribution>
-	</extension>
-    <!-- quickfix marker resolution generator for org.polarsys.chess.xtext.FlaDsl -->
-    <extension
-            point="org.eclipse.ui.ide.markerResolution">
-        <markerResolutionGenerator
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
-            markerType="org.polarsys.chess.xtext.ui.fladsl.check.fast">
-            <attribute
-                name="FIXABLE_KEY"
-                value="true">
-            </attribute>
-        </markerResolutionGenerator>
-        <markerResolutionGenerator
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
-            markerType="org.polarsys.chess.xtext.ui.fladsl.check.normal">
-            <attribute
-                name="FIXABLE_KEY"
-                value="true">
-            </attribute>
-        </markerResolutionGenerator>
-        <markerResolutionGenerator
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
-            markerType="org.polarsys.chess.xtext.ui.fladsl.check.expensive">
-            <attribute
-                name="FIXABLE_KEY"
-                value="true">
-            </attribute>
-        </markerResolutionGenerator>
-    </extension>
-   	<!-- Rename Refactoring -->
-	<extension point="org.eclipse.ui.handlers">
-		<handler 
-			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
-			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
-			<activeWhen>
-				<reference
-					definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-				</reference>
-			</activeWhen>
-		</handler>
-	</extension>
-    <extension point="org.eclipse.ui.menus">
-         <menuContribution
-            locationURI="popup:#TextEditorContext?after=group.edit">
-         <command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
-               style="push">
-            <visibleWhen checkEnabled="false">
-               <reference
-                     definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">
-               </reference>
-            </visibleWhen>
-         </command>
-      </menuContribution>
-   </extension>
-   <extension point="org.eclipse.ui.preferencePages">
-	    <page
-	        category="org.polarsys.chess.xtext.FlaDsl"
-	        class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferencePage"
-	        id="org.polarsys.chess.xtext.FlaDsl.refactoring"
-	        name="Refactoring">
-	        <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>
-	    </page>
-	</extension>
-
-  <extension point="org.eclipse.compare.contentViewers">
-    <viewer id="org.polarsys.chess.xtext.FlaDsl.compare.contentViewers"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
-            extensions="fladsl">
-    </viewer>
-  </extension>
-  <extension point="org.eclipse.compare.contentMergeViewers">
-    <viewer id="org.polarsys.chess.xtext.FlaDsl.compare.contentMergeViewers"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
-            extensions="fladsl" label="FlaDsl Compare">
-     </viewer>
-  </extension>
-  <extension point="org.eclipse.ui.editors.documentProviders">
-    <provider id="org.polarsys.chess.xtext.FlaDsl.editors.documentProviders"
-            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"
-            extensions="fladsl">
-    </provider>
-  </extension>
-  <extension point="org.eclipse.team.core.fileTypes">
-    <fileTypes
-            extension="fladsl"
-            type="text">
-    </fileTypes>
-  </extension>
-
-</plugin>
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<plugin>

+

+    <extension

+            point="org.eclipse.ui.editors">

+        <editor

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"

+            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"

+            default="true"

+            extensions="fladsl"

+            id="org.polarsys.chess.xtext.FlaDsl"

+            name="FlaDsl Editor">

+        </editor>

+    </extension>

+    <extension

+        point="org.eclipse.ui.handlers">

+        <handler

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"

+            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">

+            <activeWhen>

+                <reference

+                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+                </reference>

+            </activeWhen>

+        </handler>

+        <handler

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"

+            commandId="org.polarsys.chess.xtext.FlaDsl.validate">

+         <activeWhen>

+            <reference

+                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+            </reference>

+         </activeWhen>

+      	</handler>

+      	<!-- copy qualified name -->

+        <handler

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedNameHandler"

+            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName">

+            <activeWhen>

+				<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />

+            </activeWhen>

+        </handler>

+        <handler

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedNameHandler"

+            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName">

+            <activeWhen>

+            	<and>

+            		<reference definitionId="org.polarsys.chess.xtext.FlaDsl.XtextEditor.opened" />

+	                <iterate>

+						<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />

+					</iterate>

+				</and>

+            </activeWhen>

+        </handler>

+    </extension>

+    <extension point="org.eclipse.core.expressions.definitions">

+        <definition id="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+            <and>

+                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>

+                <with variable="activeEditor">

+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 

+                        value="org.polarsys.chess.xtext.FlaDsl" 

+                        forcePluginActivation="true"/>

+                </with>        

+            </and>

+        </definition>

+        <definition id="org.polarsys.chess.xtext.FlaDsl.XtextEditor.opened">

+            <and>

+                <reference definitionId="isXtextEditorActive"/>

+                <with variable="activeEditor">

+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 

+                        value="org.polarsys.chess.xtext.FlaDsl" 

+                        forcePluginActivation="true"/>

+                </with>        

+            </and>

+        </definition>

+    </extension>

+    <extension

+            point="org.eclipse.ui.preferencePages">

+        <page

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"

+            id="org.polarsys.chess.xtext.FlaDsl"

+            name="FlaDsl">

+            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+        </page>

+        <page

+            category="org.polarsys.chess.xtext.FlaDsl"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"

+            id="org.polarsys.chess.xtext.FlaDsl.coloring"

+            name="Syntax Coloring">

+            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+        </page>

+        <page

+            category="org.polarsys.chess.xtext.FlaDsl"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"

+            id="org.polarsys.chess.xtext.FlaDsl.templates"

+            name="Templates">

+            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+        </page>

+    </extension>

+    <extension

+            point="org.eclipse.ui.propertyPages">

+        <page

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"

+            id="org.polarsys.chess.xtext.FlaDsl"

+            name="FlaDsl">

+            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+            <enabledWhen>

+	            <adapt type="org.eclipse.core.resources.IProject"/>

+			</enabledWhen>

+	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>

+        </page>

+    </extension>

+    <extension

+        point="org.eclipse.ui.keywords">

+        <keyword

+            id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"

+            label="FlaDsl"/>

+    </extension>

+    <extension

+         point="org.eclipse.ui.commands">

+      <command

+            description="Trigger expensive validation"

+            id="org.polarsys.chess.xtext.FlaDsl.validate"

+            name="Validate">

+      </command>

+      <!-- copy qualified name -->

+      <command

+            id="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"

+            categoryId="org.eclipse.ui.category.edit"

+            description="Copy the qualified name for the selected element"

+            name="Copy Qualified Name">

+      </command>

+      <command

+            id="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"

+            categoryId="org.eclipse.ui.category.edit"

+            description="Copy the qualified name for the selected element"

+            name="Copy Qualified Name">

+      </command>

+    </extension>

+    <extension point="org.eclipse.ui.menus">

+        <menuContribution

+            locationURI="popup:#TextEditorContext?after=group.edit">

+             <command

+                 commandId="org.polarsys.chess.xtext.FlaDsl.validate"

+                 style="push"

+                 tooltip="Trigger expensive validation">

+            <visibleWhen checkEnabled="false">

+                <reference

+                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+                </reference>

+            </visibleWhen>

+         </command>  

+         </menuContribution>

+         <!-- copy qualified name -->

+         <menuContribution locationURI="popup:#TextEditorContext?after=copy">

+         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName" 

+         		style="push" tooltip="Copy Qualified Name">

+            	<visibleWhen checkEnabled="false">

+                	<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />

+            	</visibleWhen>

+         	</command>  

+         </menuContribution>

+         <menuContribution locationURI="menu:edit?after=copy">

+         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"

+            	style="push" tooltip="Copy Qualified Name">

+            	<visibleWhen checkEnabled="false">

+                	<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />

+            	</visibleWhen>

+         	</command>  

+         </menuContribution>

+         <menuContribution locationURI="popup:org.eclipse.xtext.ui.outline?after=additions">

+			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName" 

+				style="push" tooltip="Copy Qualified Name">

+         		<visibleWhen checkEnabled="false">

+	            	<and>

+	            		<reference definitionId="org.polarsys.chess.xtext.FlaDsl.XtextEditor.opened" />

+						<iterate>

+							<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />

+						</iterate>

+					</and>

+				</visibleWhen>

+			</command>

+         </menuContribution>

+    </extension>

+    <extension point="org.eclipse.ui.menus">

+		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">

+			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">

+				<visibleWhen checkEnabled="false">

+                	<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+                	</reference>

+            	</visibleWhen>

+			</command>

+		</menuContribution>

+	</extension>

+	<extension point="org.eclipse.ui.handlers">

+	    <handler

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"

+            commandId="org.eclipse.xtext.ui.editor.FindReferences">

+            <activeWhen>

+                <reference

+                    definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+                </reference>

+            </activeWhen>

+        </handler>

+    </extension>   

+

+<!-- adding resource factories -->

+

+	<extension

+		point="org.eclipse.emf.ecore.extension_parser">

+		<parser

+			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"

+			type="fladsl">

+		</parser>

+	</extension>

+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">

+        <resourceServiceProvider

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"

+            uriExtension="fladsl">

+        </resourceServiceProvider>

+    </extension>

+

+

+	<!-- marker definitions for org.polarsys.chess.xtext.FlaDsl -->

+	<extension

+	        id="fladsl.check.fast"

+	        name="FlaDsl Problem"

+	        point="org.eclipse.core.resources.markers">

+	    <super type="org.eclipse.xtext.ui.check.fast"/>

+	    <persistent value="true"/>

+	</extension>

+	<extension

+	        id="fladsl.check.normal"

+	        name="FlaDsl Problem"

+	        point="org.eclipse.core.resources.markers">

+	    <super type="org.eclipse.xtext.ui.check.normal"/>

+	    <persistent value="true"/>

+	</extension>

+	<extension

+	        id="fladsl.check.expensive"

+	        name="FlaDsl Problem"

+	        point="org.eclipse.core.resources.markers">

+	    <super type="org.eclipse.xtext.ui.check.expensive"/>

+	    <persistent value="true"/>

+	</extension>

+

+   <extension

+         point="org.eclipse.xtext.builder.participant">

+      <participant

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant"

+            fileExtensions="fladsl"

+            >

+      </participant>

+   </extension>

+   <extension

+            point="org.eclipse.ui.preferencePages">

+        <page

+            category="org.polarsys.chess.xtext.FlaDsl"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"

+            id="org.polarsys.chess.xtext.FlaDsl.compiler.preferencePage"

+            name="Compiler">

+            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+        </page>

+    </extension>

+    <extension

+            point="org.eclipse.ui.propertyPages">

+        <page

+            category="org.polarsys.chess.xtext.FlaDsl"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"

+            id="org.polarsys.chess.xtext.FlaDsl.compiler.propertyPage"

+            name="Compiler">

+            <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+            <enabledWhen>

+	            <adapt type="org.eclipse.core.resources.IProject"/>

+			</enabledWhen>

+	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>

+        </page>

+    </extension>

+    <extension point="org.eclipse.ui.menus">

+		<menuContribution locationURI="popup:#TextEditorContext?after=xtext.ui.openDeclaration">

+			<command

+				commandId="org.eclipse.xtext.ui.OpenGeneratedFileCommand"

+				id="org.polarsys.chess.xtext.FlaDsl.OpenGeneratedCode"

+				style="push">

+					<visibleWhen checkEnabled="false">

+						<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />

+					</visibleWhen>

+			</command>

+		</menuContribution>

+	</extension>

+	<extension point="org.eclipse.ui.handlers">

+		<handler

+			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.generator.trace.OpenGeneratedFileHandler"

+			commandId="org.eclipse.xtext.ui.OpenGeneratedFileCommand">

+				<activeWhen>

+					<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened" />

+				</activeWhen>

+		</handler>

+	</extension>

+

+	<!-- Quick Outline -->

+	<extension

+		point="org.eclipse.ui.handlers">

+		<handler 

+			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"

+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">

+			<activeWhen>

+				<reference

+					definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+				</reference>

+			</activeWhen>

+		</handler>

+	</extension>

+	<extension

+		point="org.eclipse.ui.commands">

+		<command

+			description="Open the quick outline."

+			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"

+			name="Quick Outline">

+		</command>

+	</extension>

+	<extension point="org.eclipse.ui.menus">

+		<menuContribution

+			locationURI="popup:#TextEditorContext?after=group.open">

+			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"

+				style="push"

+				tooltip="Open Quick Outline">

+				<visibleWhen checkEnabled="false">

+					<reference definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened"/>

+				</visibleWhen>

+			</command>

+		</menuContribution>

+	</extension>

+    <!-- quickfix marker resolution generator for org.polarsys.chess.xtext.FlaDsl -->

+    <extension

+            point="org.eclipse.ui.ide.markerResolution">

+        <markerResolutionGenerator

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"

+            markerType="org.polarsys.chess.xtext.ui.fladsl.check.fast">

+            <attribute

+                name="FIXABLE_KEY"

+                value="true">

+            </attribute>

+        </markerResolutionGenerator>

+        <markerResolutionGenerator

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"

+            markerType="org.polarsys.chess.xtext.ui.fladsl.check.normal">

+            <attribute

+                name="FIXABLE_KEY"

+                value="true">

+            </attribute>

+        </markerResolutionGenerator>

+        <markerResolutionGenerator

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"

+            markerType="org.polarsys.chess.xtext.ui.fladsl.check.expensive">

+            <attribute

+                name="FIXABLE_KEY"

+                value="true">

+            </attribute>

+        </markerResolutionGenerator>

+    </extension>

+   	<!-- Rename Refactoring -->

+	<extension point="org.eclipse.ui.handlers">

+		<handler 

+			class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"

+			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">

+			<activeWhen>

+				<reference

+					definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+				</reference>

+			</activeWhen>

+		</handler>

+	</extension>

+    <extension point="org.eclipse.ui.menus">

+         <menuContribution

+            locationURI="popup:#TextEditorContext?after=group.edit">

+         <command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"

+               style="push">

+            <visibleWhen checkEnabled="false">

+               <reference

+                     definitionId="org.polarsys.chess.xtext.FlaDsl.Editor.opened">

+               </reference>

+            </visibleWhen>

+         </command>

+      </menuContribution>

+   </extension>

+   <extension point="org.eclipse.ui.preferencePages">

+	    <page

+	        category="org.polarsys.chess.xtext.FlaDsl"

+	        class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferencePage"

+	        id="org.polarsys.chess.xtext.FlaDsl.refactoring"

+	        name="Refactoring">

+	        <keywordReference id="org.polarsys.chess.xtext.ui.keyword_FlaDsl"/>

+	    </page>

+	</extension>

+

+  <extension point="org.eclipse.compare.contentViewers">

+    <viewer id="org.polarsys.chess.xtext.FlaDsl.compare.contentViewers"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"

+            extensions="fladsl">

+    </viewer>

+  </extension>

+  <extension point="org.eclipse.compare.contentMergeViewers">

+    <viewer id="org.polarsys.chess.xtext.FlaDsl.compare.contentMergeViewers"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"

+            extensions="fladsl" label="FlaDsl Compare">

+     </viewer>

+  </extension>

+  <extension point="org.eclipse.ui.editors.documentProviders">

+    <provider id="org.polarsys.chess.xtext.FlaDsl.editors.documentProviders"

+            class="org.polarsys.chess.xtext.ui.FlaDslExecutableExtensionFactory:org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"

+            extensions="fladsl">

+    </provider>

+  </extension>

+  <extension point="org.eclipse.team.core.fileTypes">

+    <fileTypes

+            extension="fladsl"

+            type="text">

+    </fileTypes>

+  </extension>

+

+</plugin>

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/AbstractFlaDslUiModule.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/AbstractFlaDslUiModule.java
new file mode 100644
index 0000000..f7927e9
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/AbstractFlaDslUiModule.java
@@ -0,0 +1,201 @@
+
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Manual modifications go to {org.polarsys.chess.xtext.ui.FlaDslUiModule}
+ */
+@SuppressWarnings("all")
+public abstract class AbstractFlaDslUiModule extends org.eclipse.xtext.common.types.ui.DefaultCommonTypesUiModule {
+	
+	public AbstractFlaDslUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+	
+	
+	// contributed by org.eclipse.xtext.ui.generator.ImplicitUiFragment
+	public com.google.inject.Provider<org.eclipse.xtext.resource.containers.IAllContainersState> provideIAllContainersState() {
+		return org.eclipse.xtext.ui.shared.Access.getJavaProjectsState();
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.IProposalConflictHelper> bindIProposalConflictHelper() {
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.AntlrProposalConflictHelper.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureHighlightingLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureHighlightingTokenDefProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.ITokenDefProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.exporting.QualifiedNamesFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IDependentElementsCalculator> bindIDependentElementsCalculator() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultDependentElementsCalculator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptionsBuilderScope(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider.NAMED_BUILDER_SCOPE)).to(org.eclipse.xtext.builder.clustering.CurrentDescriptions.ResourceSetAware.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.IXtextEditorCallback> bindIXtextEditorCallback() {
+		return org.eclipse.xtext.builder.nature.NatureAddingEditorCallback.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.generator.IContextualOutputConfigurationProvider> bindIContextualOutputConfigurationProvider() {
+		return org.eclipse.xtext.builder.EclipseOutputConfigurationProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptionsPersisted(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider.PERSISTED_DESCRIPTIONS)).to(org.eclipse.xtext.builder.builderState.IBuilderState.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.DocumentBasedDirtyResource> bindDocumentBasedDirtyResource() {
+		return org.eclipse.xtext.builder.impl.PersistentDataAwareDirtyResource.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public Class<? extends org.eclipse.xtext.builder.IXtextBuilderParticipant> bindIXtextBuilderParticipant() {
+		return org.eclipse.xtext.builder.BuilderParticipant.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public org.eclipse.core.resources.IWorkspaceRoot bindIWorkspaceRootToInstance() {
+		return org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot();
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public void configureBuilderPreferenceStoreInitializer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer.class).annotatedWith(com.google.inject.name.Names.named("builderPreferenceInitializer")).to(org.eclipse.xtext.builder.preferences.BuilderPreferenceAccess.Initializer.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment
+	public Class<? extends org.eclipse.jface.viewers.ILabelProvider> bindILabelProvider() {
+		return org.polarsys.chess.xtext.ui.labeling.FlaDslLabelProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment
+	public void configureResourceUIServiceLabelProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.jface.viewers.ILabelProvider.class).annotatedWith(org.eclipse.xtext.ui.resource.ResourceServiceDescriptionLabelProvider.class).to(org.polarsys.chess.xtext.ui.labeling.FlaDslDescriptionLabelProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider> bindIOutlineTreeProvider() {
+		return org.polarsys.chess.xtext.ui.outline.FlaDslOutlineTreeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider> bindIOutlineTreeStructureProvider() {
+		return org.polarsys.chess.xtext.ui.outline.FlaDslOutlineTreeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.quickfix.QuickfixProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.quickfix.IssueResolutionProvider> bindIssueResolutionProvider() {
+		return org.polarsys.chess.xtext.ui.quickfix.FlaDslQuickfixProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.contentAssist.ContentAssistFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.IContentProposalProvider> bindIContentProposalProvider() {
+		return org.polarsys.chess.xtext.ui.contentassist.FlaDslProposalProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext.Factory> bindContentAssistContext$Factory() {
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser> bindIContentAssistParser() {
+		return org.polarsys.chess.xtext.ui.contentassist.antlr.FlaDslParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public void configureContentAssistLexerProvider(com.google.inject.Binder binder) {
+		binder.bind(org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslLexer.class).toProvider(org.eclipse.xtext.parser.antlr.LexerProvider.create(org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslLexer.class));
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public void configureContentAssistLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.CONTENT_ASSIST)).to(org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IRenameStrategy> bindIRenameStrategy() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultRenameStrategy.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IReferenceUpdater> bindIReferenceUpdater() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultReferenceUpdater.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public void configureIPreferenceStoreInitializer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer.class).annotatedWith(com.google.inject.name.Names.named("RefactoringPreferences")).to(org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferences.Initializer.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IRenameRefactoringProvider> bindIRenameRefactoringProvider() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultRenameRefactoringProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.ui.IRenameSupport.Factory> bindIRenameSupport$Factory() {
+		return org.eclipse.xtext.ui.refactoring.ui.DefaultRenameSupport.Factory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher> bindPrefixMatcher() {
+		return org.eclipse.xtext.ui.editor.contentassist.FQNPrefixMatcher.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public com.google.inject.Provider<org.eclipse.xtext.ui.codetemplates.ui.preferences.TemplatesLanguageConfiguration> provideTemplatesLanguageConfiguration() {
+		return org.eclipse.xtext.ui.codetemplates.ui.AccessibleCodetemplatesActivator.getTemplatesLanguageConfigurationProvider();
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public com.google.inject.Provider<org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistry> provideLanguageRegistry() {
+		return org.eclipse.xtext.ui.codetemplates.ui.AccessibleCodetemplatesActivator.getLanguageRegistry();
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistrar> bindLanguageRegistrar() {
+		return org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistrar.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage> bindXtextTemplatePreferencePage() {
+		return org.eclipse.xtext.ui.codetemplates.ui.preferences.AdvancedTemplatesPreferencePage.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.codetemplates.ui.partialEditing.IPartialContentAssistParser> bindIPartialContentAssistParser() {
+		return org.polarsys.chess.xtext.ui.contentassist.antlr.PartialFlaDslContentAssistParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.compare.CompareFragment
+	public Class<? extends org.eclipse.compare.IViewerCreator> bindIViewerCreator() {
+		return org.eclipse.xtext.ui.compare.DefaultViewerCreator.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.compare.CompareFragment
+	public void configureCompareViewerTitle(com.google.inject.Binder binder) {
+		binder.bind(String.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.UIBindings.COMPARE_VIEWER_TITLE)).toInstance("FlaDsl Compare");
+	}
+
+
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/FlaDslExecutableExtensionFactory.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/FlaDslExecutableExtensionFactory.java
new file mode 100644
index 0000000..bdea9a0
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/FlaDslExecutableExtensionFactory.java
@@ -0,0 +1,29 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.ui;
+
+import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
+import org.osgi.framework.Bundle;
+
+import com.google.inject.Injector;
+
+import org.polarsys.chess.xtext.ui.internal.FlaDslActivator;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class FlaDslExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
+
+	@Override
+	protected Bundle getBundle() {
+		return FlaDslActivator.getInstance().getBundle();
+	}
+	
+	@Override
+	protected Injector getInjector() {
+		return FlaDslActivator.getInstance().getInjector(FlaDslActivator.ORG_POLARSYS_CHESS_XTEXT_FLADSL);
+	}
+	
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/AbstractFlaDslProposalProvider.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/AbstractFlaDslProposalProvider.java
new file mode 100644
index 0000000..345976e
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/AbstractFlaDslProposalProvider.java
@@ -0,0 +1,176 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.ui.contentassist;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+
+/**
+ * Represents a generated, default implementation of superclass {@link org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider}.
+ * Methods are dynamically dispatched on the first parameter, i.e., you can override them 
+ * with a more concrete subtype. 
+ */
+@SuppressWarnings("all")
+public class AbstractFlaDslProposalProvider extends org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider {
+		
+	public void completeBehaviour_Rules(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExpression_Lhs(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExpression_Rhs(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeLhs_Failures(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRhs_Failures(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeInputExpression_Ref(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeInputExpression_FailureExpr(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeOutputExpression_Ref(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeOutputExpression_FailureExpr(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeInFailureExpr_Failures(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeOutFailureExpr_Failures(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeFailureDefinition_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeFailureDefinition_AcidAvoidable(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeComplexNofailureDefinition_AcidMitigation(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeVariableDefinition_VariableName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDavoidable_A(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDavoidable_C(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDavoidable_I(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDavoidable_D(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDMitigation_A(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDMitigation_C(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDMitigation_I(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeACIDMitigation_D(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+    
+	public void complete_Behaviour(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Expression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Lhs(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Rhs(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_InputExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_OutputExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_InFailureExpr(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_OutFailureExpr(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Definitions(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_FailureDefinition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_NoFailureDefinition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ComplexNofailureDefinition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_WildcardDefinition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_VariableDefinition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_FailureType(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ActualFailureType(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_NoFailureType(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Wildcard(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ACIDavoidable(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Aavoidable(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Cavoidable(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Iavoidable(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Davoidable(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ACIDMitigation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Amitigation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Cmitigation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Imitigation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Dmitigation(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_FQN(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/FlaDslParser.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/FlaDslParser.java
new file mode 100644
index 0000000..9117351
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/FlaDslParser.java
@@ -0,0 +1,140 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.ui.contentassist.antlr;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.antlr.runtime.RecognitionException;
+import org.eclipse.xtext.AbstractElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.AbstractContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+
+import com.google.inject.Inject;
+
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+public class FlaDslParser extends AbstractContentAssistParser {
+	
+	@Inject
+	private FlaDslGrammarAccess grammarAccess;
+	
+	private Map<AbstractElement, String> nameMappings;
+	
+	@Override
+	protected org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslParser createParser() {
+		org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslParser result = new org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslParser(null);
+		result.setGrammarAccess(grammarAccess);
+		return result;
+	}
+	
+	@Override
+	protected String getRuleName(AbstractElement element) {
+		if (nameMappings == null) {
+			nameMappings = new HashMap<AbstractElement, String>() {
+				private static final long serialVersionUID = 1L;
+				{
+					put(grammarAccess.getInputExpressionAccess().getAlternatives_0(), "rule__InputExpression__Alternatives_0");
+					put(grammarAccess.getOutputExpressionAccess().getAlternatives_0(), "rule__OutputExpression__Alternatives_0");
+					put(grammarAccess.getInFailureExprAccess().getAlternatives(), "rule__InFailureExpr__Alternatives");
+					put(grammarAccess.getOutFailureExprAccess().getAlternatives(), "rule__OutFailureExpr__Alternatives");
+					put(grammarAccess.getDefinitionsAccess().getAlternatives(), "rule__Definitions__Alternatives");
+					put(grammarAccess.getFailureTypeAccess().getAlternatives(), "rule__FailureType__Alternatives");
+					put(grammarAccess.getActualFailureTypeAccess().getAlternatives(), "rule__ActualFailureType__Alternatives");
+					put(grammarAccess.getAavoidableAccess().getAlternatives(), "rule__Aavoidable__Alternatives");
+					put(grammarAccess.getCavoidableAccess().getAlternatives(), "rule__Cavoidable__Alternatives");
+					put(grammarAccess.getIavoidableAccess().getAlternatives(), "rule__Iavoidable__Alternatives");
+					put(grammarAccess.getDavoidableAccess().getAlternatives(), "rule__Davoidable__Alternatives");
+					put(grammarAccess.getAmitigationAccess().getAlternatives(), "rule__Amitigation__Alternatives");
+					put(grammarAccess.getCmitigationAccess().getAlternatives(), "rule__Cmitigation__Alternatives");
+					put(grammarAccess.getImitigationAccess().getAlternatives(), "rule__Imitigation__Alternatives");
+					put(grammarAccess.getDmitigationAccess().getAlternatives(), "rule__Dmitigation__Alternatives");
+					put(grammarAccess.getExpressionAccess().getGroup(), "rule__Expression__Group__0");
+					put(grammarAccess.getLhsAccess().getGroup(), "rule__Lhs__Group__0");
+					put(grammarAccess.getLhsAccess().getGroup_1(), "rule__Lhs__Group_1__0");
+					put(grammarAccess.getRhsAccess().getGroup(), "rule__Rhs__Group__0");
+					put(grammarAccess.getRhsAccess().getGroup_1(), "rule__Rhs__Group_1__0");
+					put(grammarAccess.getInputExpressionAccess().getGroup(), "rule__InputExpression__Group__0");
+					put(grammarAccess.getOutputExpressionAccess().getGroup(), "rule__OutputExpression__Group__0");
+					put(grammarAccess.getInFailureExprAccess().getGroup_3(), "rule__InFailureExpr__Group_3__0");
+					put(grammarAccess.getInFailureExprAccess().getGroup_3_2(), "rule__InFailureExpr__Group_3_2__0");
+					put(grammarAccess.getOutFailureExprAccess().getGroup_3(), "rule__OutFailureExpr__Group_3__0");
+					put(grammarAccess.getOutFailureExprAccess().getGroup_3_2(), "rule__OutFailureExpr__Group_3_2__0");
+					put(grammarAccess.getFailureDefinitionAccess().getGroup(), "rule__FailureDefinition__Group__0");
+					put(grammarAccess.getFailureDefinitionAccess().getGroup_2(), "rule__FailureDefinition__Group_2__0");
+					put(grammarAccess.getNoFailureDefinitionAccess().getGroup(), "rule__NoFailureDefinition__Group__0");
+					put(grammarAccess.getComplexNofailureDefinitionAccess().getGroup(), "rule__ComplexNofailureDefinition__Group__0");
+					put(grammarAccess.getWildcardDefinitionAccess().getGroup(), "rule__WildcardDefinition__Group__0");
+					put(grammarAccess.getVariableDefinitionAccess().getGroup(), "rule__VariableDefinition__Group__0");
+					put(grammarAccess.getACIDavoidableAccess().getGroup(), "rule__ACIDavoidable__Group__0");
+					put(grammarAccess.getACIDMitigationAccess().getGroup(), "rule__ACIDMitigation__Group__0");
+					put(grammarAccess.getFQNAccess().getGroup(), "rule__FQN__Group__0");
+					put(grammarAccess.getFQNAccess().getGroup_1(), "rule__FQN__Group_1__0");
+					put(grammarAccess.getBehaviourAccess().getRulesAssignment(), "rule__Behaviour__RulesAssignment");
+					put(grammarAccess.getExpressionAccess().getLhsAssignment_1(), "rule__Expression__LhsAssignment_1");
+					put(grammarAccess.getExpressionAccess().getRhsAssignment_3(), "rule__Expression__RhsAssignment_3");
+					put(grammarAccess.getLhsAccess().getFailuresAssignment_0(), "rule__Lhs__FailuresAssignment_0");
+					put(grammarAccess.getLhsAccess().getFailuresAssignment_1_1(), "rule__Lhs__FailuresAssignment_1_1");
+					put(grammarAccess.getRhsAccess().getFailuresAssignment_0(), "rule__Rhs__FailuresAssignment_0");
+					put(grammarAccess.getRhsAccess().getFailuresAssignment_1_1(), "rule__Rhs__FailuresAssignment_1_1");
+					put(grammarAccess.getInputExpressionAccess().getRefAssignment_0_0(), "rule__InputExpression__RefAssignment_0_0");
+					put(grammarAccess.getInputExpressionAccess().getFailureExprAssignment_2(), "rule__InputExpression__FailureExprAssignment_2");
+					put(grammarAccess.getOutputExpressionAccess().getRefAssignment_0_0(), "rule__OutputExpression__RefAssignment_0_0");
+					put(grammarAccess.getOutputExpressionAccess().getFailureExprAssignment_2(), "rule__OutputExpression__FailureExprAssignment_2");
+					put(grammarAccess.getInFailureExprAccess().getFailuresAssignment_0(), "rule__InFailureExpr__FailuresAssignment_0");
+					put(grammarAccess.getInFailureExprAccess().getFailuresAssignment_1(), "rule__InFailureExpr__FailuresAssignment_1");
+					put(grammarAccess.getInFailureExprAccess().getFailuresAssignment_2(), "rule__InFailureExpr__FailuresAssignment_2");
+					put(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_1(), "rule__InFailureExpr__FailuresAssignment_3_1");
+					put(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_2_1(), "rule__InFailureExpr__FailuresAssignment_3_2_1");
+					put(grammarAccess.getInFailureExprAccess().getFailuresAssignment_4(), "rule__InFailureExpr__FailuresAssignment_4");
+					put(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_0(), "rule__OutFailureExpr__FailuresAssignment_0");
+					put(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_1(), "rule__OutFailureExpr__FailuresAssignment_1");
+					put(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_2(), "rule__OutFailureExpr__FailuresAssignment_2");
+					put(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_1(), "rule__OutFailureExpr__FailuresAssignment_3_1");
+					put(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_2_1(), "rule__OutFailureExpr__FailuresAssignment_3_2_1");
+					put(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_4(), "rule__OutFailureExpr__FailuresAssignment_4");
+					put(grammarAccess.getFailureDefinitionAccess().getTypeAssignment_1(), "rule__FailureDefinition__TypeAssignment_1");
+					put(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableAssignment_2_1(), "rule__FailureDefinition__AcidAvoidableAssignment_2_1");
+					put(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationAssignment_3(), "rule__ComplexNofailureDefinition__AcidMitigationAssignment_3");
+					put(grammarAccess.getVariableDefinitionAccess().getVariableNameAssignment_1(), "rule__VariableDefinition__VariableNameAssignment_1");
+					put(grammarAccess.getACIDavoidableAccess().getAAssignment_0(), "rule__ACIDavoidable__AAssignment_0");
+					put(grammarAccess.getACIDavoidableAccess().getCAssignment_2(), "rule__ACIDavoidable__CAssignment_2");
+					put(grammarAccess.getACIDavoidableAccess().getIAssignment_4(), "rule__ACIDavoidable__IAssignment_4");
+					put(grammarAccess.getACIDavoidableAccess().getDAssignment_6(), "rule__ACIDavoidable__DAssignment_6");
+					put(grammarAccess.getACIDMitigationAccess().getAAssignment_0(), "rule__ACIDMitigation__AAssignment_0");
+					put(grammarAccess.getACIDMitigationAccess().getCAssignment_2(), "rule__ACIDMitigation__CAssignment_2");
+					put(grammarAccess.getACIDMitigationAccess().getIAssignment_4(), "rule__ACIDMitigation__IAssignment_4");
+					put(grammarAccess.getACIDMitigationAccess().getDAssignment_6(), "rule__ACIDMitigation__DAssignment_6");
+				}
+			};
+		}
+		return nameMappings.get(element);
+	}
+	
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		try {
+			org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslParser typedParser = (org.polarsys.chess.xtext.ui.contentassist.antlr.internal.InternalFlaDslParser) parser;
+			typedParser.entryRuleBehaviour();
+			return typedParser.getFollowElements();
+		} catch(RecognitionException ex) {
+			throw new RuntimeException(ex);
+		}		
+	}
+	
+	@Override
+	protected String[] getInitialHiddenTokens() {
+		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
+	}
+	
+	public FlaDslGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(FlaDslGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/PartialFlaDslContentAssistParser.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/PartialFlaDslContentAssistParser.java
new file mode 100644
index 0000000..8d2b405
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/PartialFlaDslContentAssistParser.java
@@ -0,0 +1,38 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.ui.contentassist.antlr;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.eclipse.xtext.AbstractRule;
+import org.eclipse.xtext.ui.codetemplates.ui.partialEditing.IPartialContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.util.PolymorphicDispatcher;
+
+/*
+ * Template CodetemplatesGeneratorFragment.xpt
+ */
+public class PartialFlaDslContentAssistParser extends FlaDslParser implements IPartialContentAssistParser {
+
+	private AbstractRule rule;
+
+	@Override
+	public void initializeFor(AbstractRule rule) {
+		this.rule = rule;
+	}
+	
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		if (rule == null || rule.eIsProxy())
+			return Collections.emptyList();
+		String methodName = "entryRule" + rule.getName();
+		PolymorphicDispatcher<Collection<FollowElement>> dispatcher = 
+			new PolymorphicDispatcher<Collection<FollowElement>>(methodName, 0, 0, Collections.singletonList(parser));
+		dispatcher.invoke();
+		return parser.getFollowElements();
+	}
+
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDsl.g b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDsl.g
new file mode 100644
index 0000000..d42f42f
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDsl.g
@@ -0,0 +1,3592 @@
+/*
+ * generated by Xtext
+ */
+grammar InternalFlaDsl;
+
+options {
+	superClass=AbstractInternalContentAssistParser;
+	
+}
+
+@lexer::header {
+package org.polarsys.chess.xtext.ui.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
+}
+
+@parser::header {
+package org.polarsys.chess.xtext.ui.contentassist.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+}
+
+@parser::members {
+ 
+ 	private FlaDslGrammarAccess grammarAccess;
+ 	
+    public void setGrammarAccess(FlaDslGrammarAccess grammarAccess) {
+    	this.grammarAccess = grammarAccess;
+    }
+    
+    @Override
+    protected Grammar getGrammar() {
+    	return grammarAccess.getGrammar();
+    }
+    
+    @Override
+    protected String getValueForTokenName(String tokenName) {
+    	return tokenName;
+    }
+
+}
+
+
+
+
+// Entry rule entryRuleBehaviour
+entryRuleBehaviour 
+:
+{ before(grammarAccess.getBehaviourRule()); }
+	 ruleBehaviour
+{ after(grammarAccess.getBehaviourRule()); } 
+	 EOF 
+;
+
+// Rule Behaviour
+ruleBehaviour
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+(
+{ before(grammarAccess.getBehaviourAccess().getRulesAssignment()); }
+(rule__Behaviour__RulesAssignment)
+{ after(grammarAccess.getBehaviourAccess().getRulesAssignment()); }
+)
+(
+{ before(grammarAccess.getBehaviourAccess().getRulesAssignment()); }
+(rule__Behaviour__RulesAssignment)*
+{ after(grammarAccess.getBehaviourAccess().getRulesAssignment()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleExpression
+entryRuleExpression 
+:
+{ before(grammarAccess.getExpressionRule()); }
+	 ruleExpression
+{ after(grammarAccess.getExpressionRule()); } 
+	 EOF 
+;
+
+// Rule Expression
+ruleExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getExpressionAccess().getGroup()); }
+(rule__Expression__Group__0)
+{ after(grammarAccess.getExpressionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleLhs
+entryRuleLhs 
+:
+{ before(grammarAccess.getLhsRule()); }
+	 ruleLhs
+{ after(grammarAccess.getLhsRule()); } 
+	 EOF 
+;
+
+// Rule Lhs
+ruleLhs
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getLhsAccess().getGroup()); }
+(rule__Lhs__Group__0)
+{ after(grammarAccess.getLhsAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleRhs
+entryRuleRhs 
+:
+{ before(grammarAccess.getRhsRule()); }
+	 ruleRhs
+{ after(grammarAccess.getRhsRule()); } 
+	 EOF 
+;
+
+// Rule Rhs
+ruleRhs
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getRhsAccess().getGroup()); }
+(rule__Rhs__Group__0)
+{ after(grammarAccess.getRhsAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleInputExpression
+entryRuleInputExpression 
+:
+{ before(grammarAccess.getInputExpressionRule()); }
+	 ruleInputExpression
+{ after(grammarAccess.getInputExpressionRule()); } 
+	 EOF 
+;
+
+// Rule InputExpression
+ruleInputExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getInputExpressionAccess().getGroup()); }
+(rule__InputExpression__Group__0)
+{ after(grammarAccess.getInputExpressionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleOutputExpression
+entryRuleOutputExpression 
+:
+{ before(grammarAccess.getOutputExpressionRule()); }
+	 ruleOutputExpression
+{ after(grammarAccess.getOutputExpressionRule()); } 
+	 EOF 
+;
+
+// Rule OutputExpression
+ruleOutputExpression
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getGroup()); }
+(rule__OutputExpression__Group__0)
+{ after(grammarAccess.getOutputExpressionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleInFailureExpr
+entryRuleInFailureExpr 
+:
+{ before(grammarAccess.getInFailureExprRule()); }
+	 ruleInFailureExpr
+{ after(grammarAccess.getInFailureExprRule()); } 
+	 EOF 
+;
+
+// Rule InFailureExpr
+ruleInFailureExpr
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getInFailureExprAccess().getAlternatives()); }
+(rule__InFailureExpr__Alternatives)
+{ after(grammarAccess.getInFailureExprAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleOutFailureExpr
+entryRuleOutFailureExpr 
+:
+{ before(grammarAccess.getOutFailureExprRule()); }
+	 ruleOutFailureExpr
+{ after(grammarAccess.getOutFailureExprRule()); } 
+	 EOF 
+;
+
+// Rule OutFailureExpr
+ruleOutFailureExpr
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getAlternatives()); }
+(rule__OutFailureExpr__Alternatives)
+{ after(grammarAccess.getOutFailureExprAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+// Entry rule entryRuleFailureDefinition
+entryRuleFailureDefinition 
+:
+{ before(grammarAccess.getFailureDefinitionRule()); }
+	 ruleFailureDefinition
+{ after(grammarAccess.getFailureDefinitionRule()); } 
+	 EOF 
+;
+
+// Rule FailureDefinition
+ruleFailureDefinition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getGroup()); }
+(rule__FailureDefinition__Group__0)
+{ after(grammarAccess.getFailureDefinitionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleNoFailureDefinition
+entryRuleNoFailureDefinition 
+:
+{ before(grammarAccess.getNoFailureDefinitionRule()); }
+	 ruleNoFailureDefinition
+{ after(grammarAccess.getNoFailureDefinitionRule()); } 
+	 EOF 
+;
+
+// Rule NoFailureDefinition
+ruleNoFailureDefinition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getNoFailureDefinitionAccess().getGroup()); }
+(rule__NoFailureDefinition__Group__0)
+{ after(grammarAccess.getNoFailureDefinitionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleComplexNofailureDefinition
+entryRuleComplexNofailureDefinition 
+:
+{ before(grammarAccess.getComplexNofailureDefinitionRule()); }
+	 ruleComplexNofailureDefinition
+{ after(grammarAccess.getComplexNofailureDefinitionRule()); } 
+	 EOF 
+;
+
+// Rule ComplexNofailureDefinition
+ruleComplexNofailureDefinition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getComplexNofailureDefinitionAccess().getGroup()); }
+(rule__ComplexNofailureDefinition__Group__0)
+{ after(grammarAccess.getComplexNofailureDefinitionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleWildcardDefinition
+entryRuleWildcardDefinition 
+:
+{ before(grammarAccess.getWildcardDefinitionRule()); }
+	 ruleWildcardDefinition
+{ after(grammarAccess.getWildcardDefinitionRule()); } 
+	 EOF 
+;
+
+// Rule WildcardDefinition
+ruleWildcardDefinition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getWildcardDefinitionAccess().getGroup()); }
+(rule__WildcardDefinition__Group__0)
+{ after(grammarAccess.getWildcardDefinitionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleVariableDefinition
+entryRuleVariableDefinition 
+:
+{ before(grammarAccess.getVariableDefinitionRule()); }
+	 ruleVariableDefinition
+{ after(grammarAccess.getVariableDefinitionRule()); } 
+	 EOF 
+;
+
+// Rule VariableDefinition
+ruleVariableDefinition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getVariableDefinitionAccess().getGroup()); }
+(rule__VariableDefinition__Group__0)
+{ after(grammarAccess.getVariableDefinitionAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleACIDavoidable
+entryRuleACIDavoidable 
+:
+{ before(grammarAccess.getACIDavoidableRule()); }
+	 ruleACIDavoidable
+{ after(grammarAccess.getACIDavoidableRule()); } 
+	 EOF 
+;
+
+// Rule ACIDavoidable
+ruleACIDavoidable
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getGroup()); }
+(rule__ACIDavoidable__Group__0)
+{ after(grammarAccess.getACIDavoidableAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleACIDMitigation
+entryRuleACIDMitigation 
+:
+{ before(grammarAccess.getACIDMitigationRule()); }
+	 ruleACIDMitigation
+{ after(grammarAccess.getACIDMitigationRule()); } 
+	 EOF 
+;
+
+// Rule ACIDMitigation
+ruleACIDMitigation
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getGroup()); }
+(rule__ACIDMitigation__Group__0)
+{ after(grammarAccess.getACIDMitigationAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+// Rule ActualFailureType
+ruleActualFailureType
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getActualFailureTypeAccess().getAlternatives()); }
+(rule__ActualFailureType__Alternatives)
+{ after(grammarAccess.getActualFailureTypeAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+// Rule Aavoidable
+ruleAavoidable
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAavoidableAccess().getAlternatives()); }
+(rule__Aavoidable__Alternatives)
+{ after(grammarAccess.getAavoidableAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Cavoidable
+ruleCavoidable
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCavoidableAccess().getAlternatives()); }
+(rule__Cavoidable__Alternatives)
+{ after(grammarAccess.getCavoidableAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Iavoidable
+ruleIavoidable
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIavoidableAccess().getAlternatives()); }
+(rule__Iavoidable__Alternatives)
+{ after(grammarAccess.getIavoidableAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Davoidable
+ruleDavoidable
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDavoidableAccess().getAlternatives()); }
+(rule__Davoidable__Alternatives)
+{ after(grammarAccess.getDavoidableAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Amitigation
+ruleAmitigation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAmitigationAccess().getAlternatives()); }
+(rule__Amitigation__Alternatives)
+{ after(grammarAccess.getAmitigationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Cmitigation
+ruleCmitigation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCmitigationAccess().getAlternatives()); }
+(rule__Cmitigation__Alternatives)
+{ after(grammarAccess.getCmitigationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Imitigation
+ruleImitigation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImitigationAccess().getAlternatives()); }
+(rule__Imitigation__Alternatives)
+{ after(grammarAccess.getImitigationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Rule Dmitigation
+ruleDmitigation
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDmitigationAccess().getAlternatives()); }
+(rule__Dmitigation__Alternatives)
+{ after(grammarAccess.getDmitigationAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__InputExpression__Alternatives_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInputExpressionAccess().getRefAssignment_0_0()); }
+(rule__InputExpression__RefAssignment_0_0)
+{ after(grammarAccess.getInputExpressionAccess().getRefAssignment_0_0()); }
+)
+
+    |(
+{ before(grammarAccess.getInputExpressionAccess().getUndefinedKeyword_0_1()); }
+
+	'undefined' 
+
+{ after(grammarAccess.getInputExpressionAccess().getUndefinedKeyword_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutputExpression__Alternatives_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getRefAssignment_0_0()); }
+(rule__OutputExpression__RefAssignment_0_0)
+{ after(grammarAccess.getOutputExpressionAccess().getRefAssignment_0_0()); }
+)
+
+    |(
+{ before(grammarAccess.getOutputExpressionAccess().getUndefinedKeyword_0_1()); }
+
+	'undefined' 
+
+{ after(grammarAccess.getOutputExpressionAccess().getUndefinedKeyword_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_0()); }
+(rule__InFailureExpr__FailuresAssignment_0)
+{ after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_1()); }
+(rule__InFailureExpr__FailuresAssignment_1)
+{ after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_1()); }
+)
+
+    |(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_2()); }
+(rule__InFailureExpr__FailuresAssignment_2)
+{ after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_2()); }
+)
+
+    |(
+{ before(grammarAccess.getInFailureExprAccess().getGroup_3()); }
+(rule__InFailureExpr__Group_3__0)
+{ after(grammarAccess.getInFailureExprAccess().getGroup_3()); }
+)
+
+    |(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_4()); }
+(rule__InFailureExpr__FailuresAssignment_4)
+{ after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_0()); }
+(rule__OutFailureExpr__FailuresAssignment_0)
+{ after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_1()); }
+(rule__OutFailureExpr__FailuresAssignment_1)
+{ after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_1()); }
+)
+
+    |(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_2()); }
+(rule__OutFailureExpr__FailuresAssignment_2)
+{ after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_2()); }
+)
+
+    |(
+{ before(grammarAccess.getOutFailureExprAccess().getGroup_3()); }
+(rule__OutFailureExpr__Group_3__0)
+{ after(grammarAccess.getOutFailureExprAccess().getGroup_3()); }
+)
+
+    |(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_4()); }
+(rule__OutFailureExpr__FailuresAssignment_4)
+{ after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__ActualFailureType__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0()); }
+(	'early' 
+)
+{ after(grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1()); }
+(	'late' 
+)
+{ after(grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2()); }
+(	'commission' 
+)
+{ after(grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2()); }
+)
+
+    |(
+{ before(grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3()); }
+(	'omission' 
+)
+{ after(grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3()); }
+)
+
+    |(
+{ before(grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4()); }
+(	'valueSubtle' 
+)
+{ after(grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4()); }
+)
+
+    |(
+{ before(grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5()); }
+(	'valueCoarse' 
+)
+{ after(grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Aavoidable__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0()); }
+(	'incompletion' 
+)
+{ after(grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+(	'none' 
+)
+{ after(grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Cavoidable__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0()); }
+(	'inconsistency' 
+)
+{ after(grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+(	'none' 
+)
+{ after(grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Iavoidable__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0()); }
+(	'interference' 
+)
+{ after(grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+(	'none' 
+)
+{ after(grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Davoidable__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0()); }
+(	'impermanence' 
+)
+{ after(grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+(	'none' 
+)
+{ after(grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Amitigation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0()); }
+(	'all_or_nothing' 
+)
+{ after(grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1()); }
+(	'all_or_compensation' 
+)
+{ after(grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+(	'none' 
+)
+{ after(grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+)
+
+    |(
+{ before(grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Cmitigation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0()); }
+(	'full_consistency' 
+)
+{ after(grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1()); }
+(	'range_violation_allowed' 
+)
+{ after(grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+(	'none' 
+)
+{ after(grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+)
+
+    |(
+{ before(grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Imitigation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0()); }
+(	'serializable' 
+)
+{ after(grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1()); }
+(	'portable_level' 
+)
+{ after(grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+(	'none' 
+)
+{ after(grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+)
+
+    |(
+{ before(grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Dmitigation__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0()); }
+(	'no_loss' 
+)
+{ after(grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0()); }
+)
+
+    |(
+{ before(grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1()); }
+(	'partial_loss_allowed' 
+)
+{ after(grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1()); }
+)
+
+    |(
+{ before(grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+(	'none' 
+)
+{ after(grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2()); }
+)
+
+    |(
+{ before(grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+(	'unspecified' 
+)
+{ after(grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__Expression__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Expression__Group__0__Impl
+	rule__Expression__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getFLAKeyword_0()); }
+
+	'FLA:' 
+
+{ after(grammarAccess.getExpressionAccess().getFLAKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Expression__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Expression__Group__1__Impl
+	rule__Expression__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getLhsAssignment_1()); }
+(rule__Expression__LhsAssignment_1)
+{ after(grammarAccess.getExpressionAccess().getLhsAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Expression__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Expression__Group__2__Impl
+	rule__Expression__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getHyphenMinusGreaterThanSignKeyword_2()); }
+
+	'->' 
+
+{ after(grammarAccess.getExpressionAccess().getHyphenMinusGreaterThanSignKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Expression__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Expression__Group__3__Impl
+	rule__Expression__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getRhsAssignment_3()); }
+(rule__Expression__RhsAssignment_3)
+{ after(grammarAccess.getExpressionAccess().getRhsAssignment_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Expression__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Expression__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getSemicolonKeyword_4()); }
+
+	';' 
+
+{ after(grammarAccess.getExpressionAccess().getSemicolonKeyword_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+rule__Lhs__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Lhs__Group__0__Impl
+	rule__Lhs__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Lhs__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLhsAccess().getFailuresAssignment_0()); }
+(rule__Lhs__FailuresAssignment_0)
+{ after(grammarAccess.getLhsAccess().getFailuresAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Lhs__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Lhs__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Lhs__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLhsAccess().getGroup_1()); }
+(rule__Lhs__Group_1__0)*
+{ after(grammarAccess.getLhsAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Lhs__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Lhs__Group_1__0__Impl
+	rule__Lhs__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Lhs__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLhsAccess().getCommaKeyword_1_0()); }
+
+	',' 
+
+{ after(grammarAccess.getLhsAccess().getCommaKeyword_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Lhs__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Lhs__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Lhs__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLhsAccess().getFailuresAssignment_1_1()); }
+(rule__Lhs__FailuresAssignment_1_1)
+{ after(grammarAccess.getLhsAccess().getFailuresAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Rhs__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rhs__Group__0__Impl
+	rule__Rhs__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rhs__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRhsAccess().getFailuresAssignment_0()); }
+(rule__Rhs__FailuresAssignment_0)
+{ after(grammarAccess.getRhsAccess().getFailuresAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rhs__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rhs__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rhs__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRhsAccess().getGroup_1()); }
+(rule__Rhs__Group_1__0)*
+{ after(grammarAccess.getRhsAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Rhs__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rhs__Group_1__0__Impl
+	rule__Rhs__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rhs__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRhsAccess().getCommaKeyword_1_0()); }
+
+	',' 
+
+{ after(grammarAccess.getRhsAccess().getCommaKeyword_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rhs__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rhs__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rhs__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRhsAccess().getFailuresAssignment_1_1()); }
+(rule__Rhs__FailuresAssignment_1_1)
+{ after(grammarAccess.getRhsAccess().getFailuresAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__InputExpression__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InputExpression__Group__0__Impl
+	rule__InputExpression__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InputExpression__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInputExpressionAccess().getAlternatives_0()); }
+(rule__InputExpression__Alternatives_0)
+{ after(grammarAccess.getInputExpressionAccess().getAlternatives_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InputExpression__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InputExpression__Group__1__Impl
+	rule__InputExpression__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InputExpression__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInputExpressionAccess().getFullStopKeyword_1()); }
+
+	'.' 
+
+{ after(grammarAccess.getInputExpressionAccess().getFullStopKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InputExpression__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InputExpression__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InputExpression__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInputExpressionAccess().getFailureExprAssignment_2()); }
+(rule__InputExpression__FailureExprAssignment_2)
+{ after(grammarAccess.getInputExpressionAccess().getFailureExprAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__OutputExpression__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutputExpression__Group__0__Impl
+	rule__OutputExpression__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutputExpression__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getAlternatives_0()); }
+(rule__OutputExpression__Alternatives_0)
+{ after(grammarAccess.getOutputExpressionAccess().getAlternatives_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OutputExpression__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutputExpression__Group__1__Impl
+	rule__OutputExpression__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutputExpression__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getFullStopKeyword_1()); }
+
+	'.' 
+
+{ after(grammarAccess.getOutputExpressionAccess().getFullStopKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OutputExpression__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutputExpression__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutputExpression__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getFailureExprAssignment_2()); }
+(rule__OutputExpression__FailureExprAssignment_2)
+{ after(grammarAccess.getOutputExpressionAccess().getFailureExprAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__InFailureExpr__Group_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InFailureExpr__Group_3__0__Impl
+	rule__InFailureExpr__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Group_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); }
+
+	'{' 
+
+{ after(grammarAccess.getInFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InFailureExpr__Group_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InFailureExpr__Group_3__1__Impl
+	rule__InFailureExpr__Group_3__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Group_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_1()); }
+(rule__InFailureExpr__FailuresAssignment_3_1)
+{ after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InFailureExpr__Group_3__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InFailureExpr__Group_3__2__Impl
+	rule__InFailureExpr__Group_3__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Group_3__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+(
+{ before(grammarAccess.getInFailureExprAccess().getGroup_3_2()); }
+(rule__InFailureExpr__Group_3_2__0)
+{ after(grammarAccess.getInFailureExprAccess().getGroup_3_2()); }
+)
+(
+{ before(grammarAccess.getInFailureExprAccess().getGroup_3_2()); }
+(rule__InFailureExpr__Group_3_2__0)*
+{ after(grammarAccess.getInFailureExprAccess().getGroup_3_2()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InFailureExpr__Group_3__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InFailureExpr__Group_3__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Group_3__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getRightCurlyBracketKeyword_3_3()); }
+
+	'}' 
+
+{ after(grammarAccess.getInFailureExprAccess().getRightCurlyBracketKeyword_3_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__InFailureExpr__Group_3_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InFailureExpr__Group_3_2__0__Impl
+	rule__InFailureExpr__Group_3_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Group_3_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getCommaKeyword_3_2_0()); }
+
+	',' 
+
+{ after(grammarAccess.getInFailureExprAccess().getCommaKeyword_3_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__InFailureExpr__Group_3_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__InFailureExpr__Group_3_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__Group_3_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_2_1()); }
+(rule__InFailureExpr__FailuresAssignment_3_2_1)
+{ after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__OutFailureExpr__Group_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutFailureExpr__Group_3__0__Impl
+	rule__OutFailureExpr__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Group_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); }
+
+	'{' 
+
+{ after(grammarAccess.getOutFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OutFailureExpr__Group_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutFailureExpr__Group_3__1__Impl
+	rule__OutFailureExpr__Group_3__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Group_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_1()); }
+(rule__OutFailureExpr__FailuresAssignment_3_1)
+{ after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OutFailureExpr__Group_3__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutFailureExpr__Group_3__2__Impl
+	rule__OutFailureExpr__Group_3__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Group_3__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+(
+{ before(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); }
+(rule__OutFailureExpr__Group_3_2__0)
+{ after(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); }
+)
+(
+{ before(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); }
+(rule__OutFailureExpr__Group_3_2__0)*
+{ after(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OutFailureExpr__Group_3__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutFailureExpr__Group_3__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Group_3__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getRightCurlyBracketKeyword_3_3()); }
+
+	'}' 
+
+{ after(grammarAccess.getOutFailureExprAccess().getRightCurlyBracketKeyword_3_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__OutFailureExpr__Group_3_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutFailureExpr__Group_3_2__0__Impl
+	rule__OutFailureExpr__Group_3_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Group_3_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getCommaKeyword_3_2_0()); }
+
+	',' 
+
+{ after(grammarAccess.getOutFailureExprAccess().getCommaKeyword_3_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OutFailureExpr__Group_3_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OutFailureExpr__Group_3_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__Group_3_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_2_1()); }
+(rule__OutFailureExpr__FailuresAssignment_3_2_1)
+{ after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__FailureDefinition__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__FailureDefinition__Group__0__Impl
+	rule__FailureDefinition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getFailureDefinitionAction_0()); }
+(
+
+)
+{ after(grammarAccess.getFailureDefinitionAccess().getFailureDefinitionAction_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__FailureDefinition__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__FailureDefinition__Group__1__Impl
+	rule__FailureDefinition__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getTypeAssignment_1()); }
+(rule__FailureDefinition__TypeAssignment_1)
+{ after(grammarAccess.getFailureDefinitionAccess().getTypeAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__FailureDefinition__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__FailureDefinition__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getGroup_2()); }
+(rule__FailureDefinition__Group_2__0)?
+{ after(grammarAccess.getFailureDefinitionAccess().getGroup_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__FailureDefinition__Group_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__FailureDefinition__Group_2__0__Impl
+	rule__FailureDefinition__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__Group_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getFullStopKeyword_2_0()); }
+
+	'.' 
+
+{ after(grammarAccess.getFailureDefinitionAccess().getFullStopKeyword_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__FailureDefinition__Group_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__FailureDefinition__Group_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__Group_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableAssignment_2_1()); }
+(rule__FailureDefinition__AcidAvoidableAssignment_2_1)
+{ after(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableAssignment_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__NoFailureDefinition__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__NoFailureDefinition__Group__0__Impl
+	rule__NoFailureDefinition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NoFailureDefinition__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getNoFailureDefinitionAccess().getNoFailureDefinitionAction_0()); }
+(
+
+)
+{ after(grammarAccess.getNoFailureDefinitionAccess().getNoFailureDefinitionAction_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__NoFailureDefinition__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__NoFailureDefinition__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NoFailureDefinition__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getNoFailureDefinitionAccess().getNoFailureKeyword_1()); }
+
+	'noFailure' 
+
+{ after(grammarAccess.getNoFailureDefinitionAccess().getNoFailureKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ComplexNofailureDefinition__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ComplexNofailureDefinition__Group__0__Impl
+	rule__ComplexNofailureDefinition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ComplexNofailureDefinition__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureDefinitionAction_0()); }
+(
+
+)
+{ after(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureDefinitionAction_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ComplexNofailureDefinition__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ComplexNofailureDefinition__Group__1__Impl
+	rule__ComplexNofailureDefinition__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ComplexNofailureDefinition__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureKeyword_1()); }
+
+	'noFailure' 
+
+{ after(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ComplexNofailureDefinition__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ComplexNofailureDefinition__Group__2__Impl
+	rule__ComplexNofailureDefinition__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ComplexNofailureDefinition__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComplexNofailureDefinitionAccess().getFullStopKeyword_2()); }
+
+	'.' 
+
+{ after(grammarAccess.getComplexNofailureDefinitionAccess().getFullStopKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ComplexNofailureDefinition__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ComplexNofailureDefinition__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ComplexNofailureDefinition__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationAssignment_3()); }
+(rule__ComplexNofailureDefinition__AcidMitigationAssignment_3)
+{ after(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationAssignment_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__WildcardDefinition__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__WildcardDefinition__Group__0__Impl
+	rule__WildcardDefinition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__WildcardDefinition__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getWildcardDefinitionAccess().getWildcardDefinitionAction_0()); }
+(
+
+)
+{ after(grammarAccess.getWildcardDefinitionAccess().getWildcardDefinitionAction_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__WildcardDefinition__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__WildcardDefinition__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__WildcardDefinition__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getWildcardDefinitionAccess().getWildcardKeyword_1()); }
+
+	'wildcard' 
+
+{ after(grammarAccess.getWildcardDefinitionAccess().getWildcardKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__VariableDefinition__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__VariableDefinition__Group__0__Impl
+	rule__VariableDefinition__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__VariableDefinition__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getVariableDefinitionAccess().getVariableDefinitionAction_0()); }
+(
+
+)
+{ after(grammarAccess.getVariableDefinitionAccess().getVariableDefinitionAction_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__VariableDefinition__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__VariableDefinition__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__VariableDefinition__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getVariableDefinitionAccess().getVariableNameAssignment_1()); }
+(rule__VariableDefinition__VariableNameAssignment_1)
+{ after(grammarAccess.getVariableDefinitionAccess().getVariableNameAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__ACIDavoidable__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__0__Impl
+	rule__ACIDavoidable__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getAAssignment_0()); }
+(rule__ACIDavoidable__AAssignment_0)
+{ after(grammarAccess.getACIDavoidableAccess().getAAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDavoidable__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__1__Impl
+	rule__ACIDavoidable__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_1()); }
+
+	'.' 
+
+{ after(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDavoidable__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__2__Impl
+	rule__ACIDavoidable__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getCAssignment_2()); }
+(rule__ACIDavoidable__CAssignment_2)
+{ after(grammarAccess.getACIDavoidableAccess().getCAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDavoidable__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__3__Impl
+	rule__ACIDavoidable__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_3()); }
+
+	'.' 
+
+{ after(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDavoidable__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__4__Impl
+	rule__ACIDavoidable__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getIAssignment_4()); }
+(rule__ACIDavoidable__IAssignment_4)
+{ after(grammarAccess.getACIDavoidableAccess().getIAssignment_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDavoidable__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__5__Impl
+	rule__ACIDavoidable__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_5()); }
+
+	'.' 
+
+{ after(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDavoidable__Group__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDavoidable__Group__6__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__Group__6__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getDAssignment_6()); }
+(rule__ACIDavoidable__DAssignment_6)
+{ after(grammarAccess.getACIDavoidableAccess().getDAssignment_6()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__ACIDMitigation__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__0__Impl
+	rule__ACIDMitigation__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getAAssignment_0()); }
+(rule__ACIDMitigation__AAssignment_0)
+{ after(grammarAccess.getACIDMitigationAccess().getAAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDMitigation__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__1__Impl
+	rule__ACIDMitigation__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_1()); }
+
+	'.' 
+
+{ after(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDMitigation__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__2__Impl
+	rule__ACIDMitigation__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getCAssignment_2()); }
+(rule__ACIDMitigation__CAssignment_2)
+{ after(grammarAccess.getACIDMitigationAccess().getCAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDMitigation__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__3__Impl
+	rule__ACIDMitigation__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_3()); }
+
+	'.' 
+
+{ after(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDMitigation__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__4__Impl
+	rule__ACIDMitigation__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getIAssignment_4()); }
+(rule__ACIDMitigation__IAssignment_4)
+{ after(grammarAccess.getACIDMitigationAccess().getIAssignment_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDMitigation__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__5__Impl
+	rule__ACIDMitigation__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_5()); }
+
+	'.' 
+
+{ after(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ACIDMitigation__Group__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ACIDMitigation__Group__6__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__Group__6__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getDAssignment_6()); }
+(rule__ACIDMitigation__DAssignment_6)
+{ after(grammarAccess.getACIDMitigationAccess().getDAssignment_6()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__Behaviour__RulesAssignment
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBehaviourAccess().getRulesExpressionParserRuleCall_0()); }
+	ruleExpression{ after(grammarAccess.getBehaviourAccess().getRulesExpressionParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__LhsAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0()); }
+	ruleLhs{ after(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Expression__RhsAssignment_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0()); }
+	ruleRhs{ after(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Lhs__FailuresAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_0_0()); }
+	ruleInputExpression{ after(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Lhs__FailuresAssignment_1_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_1_1_0()); }
+	ruleInputExpression{ after(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_1_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rhs__FailuresAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_0_0()); }
+	ruleOutputExpression{ after(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rhs__FailuresAssignment_1_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_1_1_0()); }
+	ruleOutputExpression{ after(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_1_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InputExpression__RefAssignment_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInputExpressionAccess().getRefPortCrossReference_0_0_0()); }
+(
+{ before(grammarAccess.getInputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); }
+	RULE_ID{ after(grammarAccess.getInputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); }
+)
+{ after(grammarAccess.getInputExpressionAccess().getRefPortCrossReference_0_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InputExpression__FailureExprAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInputExpressionAccess().getFailureExprInFailureExprParserRuleCall_2_0()); }
+	ruleInFailureExpr{ after(grammarAccess.getInputExpressionAccess().getFailureExprInFailureExprParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutputExpression__RefAssignment_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getRefPortCrossReference_0_0_0()); }
+(
+{ before(grammarAccess.getOutputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); }
+	RULE_ID{ after(grammarAccess.getOutputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); }
+)
+{ after(grammarAccess.getOutputExpressionAccess().getRefPortCrossReference_0_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutputExpression__FailureExprAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutputExpressionAccess().getFailureExprOutFailureExprParserRuleCall_2_0()); }
+	ruleOutFailureExpr{ after(grammarAccess.getOutputExpressionAccess().getFailureExprOutFailureExprParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__FailuresAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresWildcardDefinitionParserRuleCall_0_0()); }
+	ruleWildcardDefinition{ after(grammarAccess.getInFailureExprAccess().getFailuresWildcardDefinitionParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__FailuresAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_1_0()); }
+	ruleNoFailureDefinition{ after(grammarAccess.getInFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__FailuresAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); }
+	ruleFailureDefinition{ after(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__FailuresAssignment_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); }
+	ruleFailureDefinition{ after(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__FailuresAssignment_3_2_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); }
+	ruleFailureDefinition{ after(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__InFailureExpr__FailuresAssignment_4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getInFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); }
+	ruleVariableDefinition{ after(grammarAccess.getInFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__FailuresAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_0_0()); }
+	ruleNoFailureDefinition{ after(grammarAccess.getOutFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__FailuresAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresComplexNofailureDefinitionParserRuleCall_1_0()); }
+	ruleComplexNofailureDefinition{ after(grammarAccess.getOutFailureExprAccess().getFailuresComplexNofailureDefinitionParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__FailuresAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); }
+	ruleFailureDefinition{ after(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__FailuresAssignment_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); }
+	ruleFailureDefinition{ after(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__FailuresAssignment_3_2_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); }
+	ruleFailureDefinition{ after(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OutFailureExpr__FailuresAssignment_4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOutFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); }
+	ruleVariableDefinition{ after(grammarAccess.getOutFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__TypeAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getTypeActualFailureTypeEnumRuleCall_1_0()); }
+	ruleActualFailureType{ after(grammarAccess.getFailureDefinitionAccess().getTypeActualFailureTypeEnumRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__FailureDefinition__AcidAvoidableAssignment_2_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableACIDavoidableParserRuleCall_2_1_0()); }
+	ruleACIDavoidable{ after(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableACIDavoidableParserRuleCall_2_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ComplexNofailureDefinition__AcidMitigationAssignment_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0()); }
+	ruleACIDMitigation{ after(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__VariableDefinition__VariableNameAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0()); }
+	RULE_ID{ after(grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__AAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0()); }
+	ruleAavoidable{ after(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__CAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0()); }
+	ruleCavoidable{ after(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__IAssignment_4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0()); }
+	ruleIavoidable{ after(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDavoidable__DAssignment_6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0()); }
+	ruleDavoidable{ after(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__AAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0()); }
+	ruleAmitigation{ after(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__CAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0()); }
+	ruleCmitigation{ after(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__IAssignment_4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0()); }
+	ruleImitigation{ after(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ACIDMitigation__DAssignment_6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0()); }
+	ruleDmitigation{ after(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDsl.tokens b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDsl.tokens
new file mode 100644
index 0000000..fca6fb1
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDsl.tokens
@@ -0,0 +1,67 @@
+','=35
+'->'=33
+'.'=36
+';'=34
+'FLA:'=32
+'all_or_compensation'=25
+'all_or_nothing'=24
+'commission'=14
+'early'=12
+'full_consistency'=26
+'impermanence'=23
+'incompletion'=18
+'inconsistency'=21
+'interference'=22
+'late'=13
+'noFailure'=39
+'no_loss'=30
+'none'=19
+'omission'=15
+'partial_loss_allowed'=31
+'portable_level'=29
+'range_violation_allowed'=27
+'serializable'=28
+'undefined'=11
+'unspecified'=20
+'valueCoarse'=17
+'valueSubtle'=16
+'wildcard'=40
+'{'=37
+'}'=38
+RULE_ANY_OTHER=10
+RULE_ID=4
+RULE_INT=5
+RULE_ML_COMMENT=7
+RULE_SL_COMMENT=8
+RULE_STRING=6
+RULE_WS=9
+T__11=11
+T__12=12
+T__13=13
+T__14=14
+T__15=15
+T__16=16
+T__17=17
+T__18=18
+T__19=19
+T__20=20
+T__21=21
+T__22=22
+T__23=23
+T__24=24
+T__25=25
+T__26=26
+T__27=27
+T__28=28
+T__29=29
+T__30=30
+T__31=31
+T__32=32
+T__33=33
+T__34=34
+T__35=35
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+T__40=40
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDslLexer.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDslLexer.java
new file mode 100644
index 0000000..75a8ef9
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDslLexer.java
@@ -0,0 +1,1897 @@
+package org.polarsys.chess.xtext.ui.contentassist.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalFlaDslLexer extends Lexer {
+    public static final int RULE_STRING=6;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__37=37;
+    public static final int T__16=16;
+    public static final int T__38=38;
+    public static final int T__17=17;
+    public static final int T__39=39;
+    public static final int T__18=18;
+    public static final int T__11=11;
+    public static final int T__33=33;
+    public static final int T__12=12;
+    public static final int T__34=34;
+    public static final int T__13=13;
+    public static final int T__35=35;
+    public static final int T__14=14;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_ID=4;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int RULE_INT=5;
+    public static final int T__29=29;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__40=40;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+    public InternalFlaDslLexer() {;} 
+    public InternalFlaDslLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalFlaDslLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "InternalFlaDsl.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:11:7: ( 'undefined' )
+            // InternalFlaDsl.g:11:9: 'undefined'
+            {
+            match("undefined"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__11"
+
+    // $ANTLR start "T__12"
+    public final void mT__12() throws RecognitionException {
+        try {
+            int _type = T__12;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:12:7: ( 'early' )
+            // InternalFlaDsl.g:12:9: 'early'
+            {
+            match("early"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__12"
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:13:7: ( 'late' )
+            // InternalFlaDsl.g:13:9: 'late'
+            {
+            match("late"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__13"
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:14:7: ( 'commission' )
+            // InternalFlaDsl.g:14:9: 'commission'
+            {
+            match("commission"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:15:7: ( 'omission' )
+            // InternalFlaDsl.g:15:9: 'omission'
+            {
+            match("omission"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:16:7: ( 'valueSubtle' )
+            // InternalFlaDsl.g:16:9: 'valueSubtle'
+            {
+            match("valueSubtle"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:17:7: ( 'valueCoarse' )
+            // InternalFlaDsl.g:17:9: 'valueCoarse'
+            {
+            match("valueCoarse"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:18:7: ( 'incompletion' )
+            // InternalFlaDsl.g:18:9: 'incompletion'
+            {
+            match("incompletion"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:19:7: ( 'none' )
+            // InternalFlaDsl.g:19:9: 'none'
+            {
+            match("none"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:20:7: ( 'unspecified' )
+            // InternalFlaDsl.g:20:9: 'unspecified'
+            {
+            match("unspecified"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:21:7: ( 'inconsistency' )
+            // InternalFlaDsl.g:21:9: 'inconsistency'
+            {
+            match("inconsistency"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:22:7: ( 'interference' )
+            // InternalFlaDsl.g:22:9: 'interference'
+            {
+            match("interference"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:23:7: ( 'impermanence' )
+            // InternalFlaDsl.g:23:9: 'impermanence'
+            {
+            match("impermanence"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:24:7: ( 'all_or_nothing' )
+            // InternalFlaDsl.g:24:9: 'all_or_nothing'
+            {
+            match("all_or_nothing"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:25:7: ( 'all_or_compensation' )
+            // InternalFlaDsl.g:25:9: 'all_or_compensation'
+            {
+            match("all_or_compensation"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:26:7: ( 'full_consistency' )
+            // InternalFlaDsl.g:26:9: 'full_consistency'
+            {
+            match("full_consistency"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:27:7: ( 'range_violation_allowed' )
+            // InternalFlaDsl.g:27:9: 'range_violation_allowed'
+            {
+            match("range_violation_allowed"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
+        try {
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:28:7: ( 'serializable' )
+            // InternalFlaDsl.g:28:9: 'serializable'
+            {
+            match("serializable"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__28"
+
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
+        try {
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:29:7: ( 'portable_level' )
+            // InternalFlaDsl.g:29:9: 'portable_level'
+            {
+            match("portable_level"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__29"
+
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:30:7: ( 'no_loss' )
+            // InternalFlaDsl.g:30:9: 'no_loss'
+            {
+            match("no_loss"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:31:7: ( 'partial_loss_allowed' )
+            // InternalFlaDsl.g:31:9: 'partial_loss_allowed'
+            {
+            match("partial_loss_allowed"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:32:7: ( 'FLA:' )
+            // InternalFlaDsl.g:32:9: 'FLA:'
+            {
+            match("FLA:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:33:7: ( '->' )
+            // InternalFlaDsl.g:33:9: '->'
+            {
+            match("->"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:34:7: ( ';' )
+            // InternalFlaDsl.g:34:9: ';'
+            {
+            match(';'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "T__35"
+    public final void mT__35() throws RecognitionException {
+        try {
+            int _type = T__35;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:35:7: ( ',' )
+            // InternalFlaDsl.g:35:9: ','
+            {
+            match(','); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__35"
+
+    // $ANTLR start "T__36"
+    public final void mT__36() throws RecognitionException {
+        try {
+            int _type = T__36;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:36:7: ( '.' )
+            // InternalFlaDsl.g:36:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__36"
+
+    // $ANTLR start "T__37"
+    public final void mT__37() throws RecognitionException {
+        try {
+            int _type = T__37;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:37:7: ( '{' )
+            // InternalFlaDsl.g:37:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__37"
+
+    // $ANTLR start "T__38"
+    public final void mT__38() throws RecognitionException {
+        try {
+            int _type = T__38;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:38:7: ( '}' )
+            // InternalFlaDsl.g:38:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__38"
+
+    // $ANTLR start "T__39"
+    public final void mT__39() throws RecognitionException {
+        try {
+            int _type = T__39;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:39:7: ( 'noFailure' )
+            // InternalFlaDsl.g:39:9: 'noFailure'
+            {
+            match("noFailure"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__39"
+
+    // $ANTLR start "T__40"
+    public final void mT__40() throws RecognitionException {
+        try {
+            int _type = T__40;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:40:7: ( 'wildcard' )
+            // InternalFlaDsl.g:40:9: 'wildcard'
+            {
+            match("wildcard"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__40"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3578:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalFlaDsl.g:3578:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // InternalFlaDsl.g:3578:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // InternalFlaDsl.g:3578:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // InternalFlaDsl.g:3578:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='Z')||LA2_0=='_'||(LA2_0>='a' && LA2_0<='z')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // InternalFlaDsl.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3580:10: ( ( '0' .. '9' )+ )
+            // InternalFlaDsl.g:3580:12: ( '0' .. '9' )+
+            {
+            // InternalFlaDsl.g:3580:12: ( '0' .. '9' )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( ((LA3_0>='0' && LA3_0<='9')) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // InternalFlaDsl.g:3580:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3582:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalFlaDsl.g:3582:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // InternalFlaDsl.g:3582:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0=='\"') ) {
+                alt6=1;
+            }
+            else if ( (LA6_0=='\'') ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // InternalFlaDsl.g:3582:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // InternalFlaDsl.g:3582:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop4:
+                    do {
+                        int alt4=3;
+                        int LA4_0 = input.LA(1);
+
+                        if ( (LA4_0=='\\') ) {
+                            alt4=1;
+                        }
+                        else if ( ((LA4_0>='\u0000' && LA4_0<='!')||(LA4_0>='#' && LA4_0<='[')||(LA4_0>=']' && LA4_0<='\uFFFF')) ) {
+                            alt4=2;
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // InternalFlaDsl.g:3582:21: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalFlaDsl.g:3582:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop4;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:3582:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // InternalFlaDsl.g:3582:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop5:
+                    do {
+                        int alt5=3;
+                        int LA5_0 = input.LA(1);
+
+                        if ( (LA5_0=='\\') ) {
+                            alt5=1;
+                        }
+                        else if ( ((LA5_0>='\u0000' && LA5_0<='&')||(LA5_0>='(' && LA5_0<='[')||(LA5_0>=']' && LA5_0<='\uFFFF')) ) {
+                            alt5=2;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // InternalFlaDsl.g:3582:54: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalFlaDsl.g:3582:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3584:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalFlaDsl.g:3584:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // InternalFlaDsl.g:3584:24: ( options {greedy=false; } : . )*
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( (LA7_0=='*') ) {
+                    int LA7_1 = input.LA(2);
+
+                    if ( (LA7_1=='/') ) {
+                        alt7=2;
+                    }
+                    else if ( ((LA7_1>='\u0000' && LA7_1<='.')||(LA7_1>='0' && LA7_1<='\uFFFF')) ) {
+                        alt7=1;
+                    }
+
+
+                }
+                else if ( ((LA7_0>='\u0000' && LA7_0<=')')||(LA7_0>='+' && LA7_0<='\uFFFF')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // InternalFlaDsl.g:3584:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop7;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3586:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalFlaDsl.g:3586:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // InternalFlaDsl.g:3586:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( ((LA8_0>='\u0000' && LA8_0<='\t')||(LA8_0>='\u000B' && LA8_0<='\f')||(LA8_0>='\u000E' && LA8_0<='\uFFFF')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // InternalFlaDsl.g:3586:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+            // InternalFlaDsl.g:3586:40: ( ( '\\r' )? '\\n' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\n'||LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // InternalFlaDsl.g:3586:41: ( '\\r' )? '\\n'
+                    {
+                    // InternalFlaDsl.g:3586:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // InternalFlaDsl.g:3586:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3588:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalFlaDsl.g:3588:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // InternalFlaDsl.g:3588:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt11=0;
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\t' && LA11_0<='\n')||LA11_0=='\r'||LA11_0==' ') ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // InternalFlaDsl.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt11 >= 1 ) break loop11;
+                        EarlyExitException eee =
+                            new EarlyExitException(11, input);
+                        throw eee;
+                }
+                cnt11++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:3590:16: ( . )
+            // InternalFlaDsl.g:3590:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // InternalFlaDsl.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=37;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // InternalFlaDsl.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // InternalFlaDsl.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // InternalFlaDsl.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // InternalFlaDsl.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // InternalFlaDsl.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // InternalFlaDsl.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // InternalFlaDsl.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // InternalFlaDsl.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // InternalFlaDsl.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // InternalFlaDsl.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // InternalFlaDsl.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // InternalFlaDsl.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // InternalFlaDsl.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // InternalFlaDsl.g:1:88: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 15 :
+                // InternalFlaDsl.g:1:94: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 16 :
+                // InternalFlaDsl.g:1:100: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 17 :
+                // InternalFlaDsl.g:1:106: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 18 :
+                // InternalFlaDsl.g:1:112: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 19 :
+                // InternalFlaDsl.g:1:118: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 20 :
+                // InternalFlaDsl.g:1:124: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 21 :
+                // InternalFlaDsl.g:1:130: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 22 :
+                // InternalFlaDsl.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // InternalFlaDsl.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // InternalFlaDsl.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // InternalFlaDsl.g:1:154: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 26 :
+                // InternalFlaDsl.g:1:160: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 27 :
+                // InternalFlaDsl.g:1:166: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 28 :
+                // InternalFlaDsl.g:1:172: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 29 :
+                // InternalFlaDsl.g:1:178: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 30 :
+                // InternalFlaDsl.g:1:184: T__40
+                {
+                mT__40(); 
+
+                }
+                break;
+            case 31 :
+                // InternalFlaDsl.g:1:190: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 32 :
+                // InternalFlaDsl.g:1:198: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 33 :
+                // InternalFlaDsl.g:1:207: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 34 :
+                // InternalFlaDsl.g:1:219: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 35 :
+                // InternalFlaDsl.g:1:235: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 36 :
+                // InternalFlaDsl.g:1:251: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 37 :
+                // InternalFlaDsl.g:1:259: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\16\37\1\35\5\uffff\1\37\1\35\2\uffff\3\35\2\uffff\1\37\1\uffff\17\37\6\uffff\1\37\5\uffff\30\37\1\150\6\37\1\160\10\37\1\uffff\3\37\1\174\1\uffff\7\37\1\uffff\13\37\1\uffff\33\37\1\u00ab\13\37\1\u00b8\6\37\1\uffff\10\37\1\u00c7\1\u00c8\2\37\1\uffff\6\37\1\u00d1\7\37\2\uffff\1\37\1\u00da\6\37\1\uffff\7\37\1\u00e8\1\uffff\1\u00e9\1\u00ea\13\37\3\uffff\1\u00f6\1\37\1\u00f8\1\u00f9\4\37\1\u00fe\2\37\1\uffff\1\u0101\2\uffff\4\37\1\uffff\2\37\1\uffff\1\u0108\3\37\1\u010c\1\37\1\uffff\3\37\1\uffff\2\37\1\u0113\3\37\1\uffff\5\37\1\u011c\2\37\1\uffff\1\37\1\u0120\1\37\1\uffff\1\37\1\u0123\1\uffff";
+    static final String DFA12_eofS =
+        "\u0124\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\156\2\141\1\157\1\155\1\141\1\155\1\157\1\154\1\165\1\141\1\145\1\141\1\114\1\76\5\uffff\1\151\1\101\2\uffff\2\0\1\52\2\uffff\1\144\1\uffff\1\162\1\164\1\155\1\151\1\154\1\143\1\160\1\106\2\154\1\156\3\162\1\101\6\uffff\1\154\5\uffff\1\145\1\160\1\154\1\145\1\155\1\163\1\165\1\157\3\145\1\154\1\141\1\137\1\154\1\147\1\151\2\164\1\72\1\144\1\146\1\145\1\171\1\60\1\151\1\163\1\145\1\155\2\162\1\60\1\157\1\151\1\157\1\137\1\145\2\141\1\151\1\uffff\1\143\1\151\1\143\1\60\1\uffff\1\163\1\151\1\103\1\160\1\163\1\146\1\155\1\uffff\1\163\1\154\1\162\1\143\1\137\1\154\1\142\2\141\1\156\1\151\1\uffff\1\163\1\157\1\165\1\157\1\154\1\151\1\145\1\141\1\163\1\165\1\137\1\157\1\166\1\151\2\154\1\162\1\145\1\146\1\151\1\156\1\142\1\141\1\145\1\163\1\162\1\156\1\60\1\162\1\143\1\156\1\151\1\172\1\145\1\137\2\144\1\151\1\157\1\60\1\164\1\162\2\164\2\145\1\uffff\1\145\2\157\1\163\1\157\1\141\1\137\1\154\2\60\1\145\1\156\1\uffff\1\154\1\163\1\151\1\145\2\156\1\60\1\164\1\155\1\151\1\154\1\142\1\154\1\157\2\uffff\1\144\1\60\2\145\1\157\1\156\2\143\1\uffff\1\150\1\160\1\163\1\141\1\154\1\145\1\163\1\60\1\uffff\2\60\1\156\1\143\2\145\1\151\1\145\2\164\1\145\1\166\1\163\3\uffff\1\60\1\171\2\60\2\156\1\145\1\151\1\60\1\145\1\137\1\uffff\1\60\2\uffff\1\147\1\163\1\156\1\157\1\uffff\1\154\1\141\1\uffff\1\60\1\141\1\143\1\156\1\60\1\154\1\uffff\1\164\1\171\1\137\1\uffff\1\154\1\151\1\60\1\141\2\157\1\uffff\1\154\1\167\1\156\1\154\1\145\1\60\1\157\1\144\1\uffff\1\167\1\60\1\145\1\uffff\1\144\1\60\1\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\1\156\2\141\1\157\1\155\1\141\1\156\1\157\1\154\1\165\1\141\1\145\1\157\1\114\1\76\5\uffff\1\151\1\172\2\uffff\2\uffff\1\57\2\uffff\1\163\1\uffff\1\162\1\164\1\155\1\151\1\154\1\164\1\160\1\156\2\154\1\156\3\162\1\101\6\uffff\1\154\5\uffff\1\145\1\160\1\154\1\145\1\155\1\163\1\165\1\157\3\145\1\154\1\141\1\137\1\154\1\147\1\151\2\164\1\72\1\144\1\146\1\145\1\171\1\172\1\151\1\163\1\145\1\156\2\162\1\172\1\157\1\151\1\157\1\137\1\145\2\141\1\151\1\uffff\1\143\1\151\1\143\1\172\1\uffff\1\163\1\151\1\123\1\160\1\163\1\146\1\155\1\uffff\1\163\1\154\1\162\1\143\1\137\1\154\1\142\2\141\1\156\1\151\1\uffff\1\163\1\157\1\165\1\157\1\154\1\151\1\145\1\141\1\163\1\165\1\137\1\157\1\166\1\151\2\154\1\162\1\145\1\146\1\151\1\156\1\142\1\141\1\145\1\163\1\162\1\156\1\172\1\162\2\156\1\151\1\172\1\145\1\137\2\144\1\151\1\157\1\172\1\164\1\162\2\164\2\145\1\uffff\1\145\2\157\1\163\1\157\1\141\1\137\1\154\2\172\1\145\1\156\1\uffff\1\154\1\163\1\151\1\145\2\156\1\172\1\164\1\155\1\151\1\154\1\142\1\154\1\157\2\uffff\1\144\1\172\2\145\1\157\1\156\2\143\1\uffff\1\150\1\160\1\163\1\141\1\154\1\145\1\163\1\172\1\uffff\2\172\1\156\1\143\2\145\1\151\1\145\2\164\1\145\1\166\1\163\3\uffff\1\172\1\171\2\172\2\156\1\145\1\151\1\172\1\145\1\137\1\uffff\1\172\2\uffff\1\147\1\163\1\156\1\157\1\uffff\1\154\1\141\1\uffff\1\172\1\141\1\143\1\156\1\172\1\154\1\uffff\1\164\1\171\1\137\1\uffff\1\154\1\151\1\172\1\141\2\157\1\uffff\1\154\1\167\1\156\1\154\1\145\1\172\1\157\1\144\1\uffff\1\167\1\172\1\145\1\uffff\1\144\1\172\1\uffff";
+    static final String DFA12_acceptS =
+        "\20\uffff\1\30\1\31\1\32\1\33\1\34\2\uffff\1\37\1\40\3\uffff\1\44\1\45\1\uffff\1\37\17\uffff\1\27\1\30\1\31\1\32\1\33\1\34\1\uffff\1\40\1\41\1\42\1\43\1\44\50\uffff\1\26\4\uffff\1\3\7\uffff\1\11\13\uffff\1\2\56\uffff\1\24\14\uffff\1\5\16\uffff\1\36\1\1\10\uffff\1\35\10\uffff\1\4\15\uffff\1\12\1\6\1\7\13\uffff\1\10\1\uffff\1\14\1\15\4\uffff\1\22\2\uffff\1\13\6\uffff\1\16\3\uffff\1\23\6\uffff\1\20\10\uffff\1\17\3\uffff\1\25\2\uffff\1\21";
+    static final String DFA12_specialS =
+        "\1\2\30\uffff\1\0\1\1\u0109\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\35\2\34\2\35\1\34\22\35\1\34\1\35\1\31\4\35\1\32\4\35\1\21\1\17\1\22\1\33\12\30\1\35\1\20\5\35\5\27\1\16\24\27\3\35\1\26\1\27\1\35\1\11\1\27\1\4\1\27\1\2\1\12\2\27\1\7\2\27\1\3\1\27\1\10\1\5\1\15\1\27\1\13\1\14\1\27\1\1\1\6\1\25\3\27\1\23\1\35\1\24\uff82\35",
+            "\1\36",
+            "\1\40",
+            "\1\41",
+            "\1\42",
+            "\1\43",
+            "\1\44",
+            "\1\46\1\45",
+            "\1\47",
+            "\1\50",
+            "\1\51",
+            "\1\52",
+            "\1\53",
+            "\1\55\15\uffff\1\54",
+            "\1\56",
+            "\1\57",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\65",
+            "\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "",
+            "\0\67",
+            "\0\67",
+            "\1\70\4\uffff\1\71",
+            "",
+            "",
+            "\1\73\16\uffff\1\74",
+            "",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\1\102\20\uffff\1\103",
+            "\1\104",
+            "\1\107\30\uffff\1\106\16\uffff\1\105",
+            "\1\110",
+            "\1\111",
+            "\1\112",
+            "\1\113",
+            "\1\114",
+            "\1\115",
+            "\1\116",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\117",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\120",
+            "\1\121",
+            "\1\122",
+            "\1\123",
+            "\1\124",
+            "\1\125",
+            "\1\126",
+            "\1\127",
+            "\1\130",
+            "\1\131",
+            "\1\132",
+            "\1\133",
+            "\1\134",
+            "\1\135",
+            "\1\136",
+            "\1\137",
+            "\1\140",
+            "\1\141",
+            "\1\142",
+            "\1\143",
+            "\1\144",
+            "\1\145",
+            "\1\146",
+            "\1\147",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\151",
+            "\1\152",
+            "\1\153",
+            "\1\154\1\155",
+            "\1\156",
+            "\1\157",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\161",
+            "\1\162",
+            "\1\163",
+            "\1\164",
+            "\1\165",
+            "\1\166",
+            "\1\167",
+            "\1\170",
+            "",
+            "\1\171",
+            "\1\172",
+            "\1\173",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "\1\175",
+            "\1\176",
+            "\1\u0080\17\uffff\1\177",
+            "\1\u0081",
+            "\1\u0082",
+            "\1\u0083",
+            "\1\u0084",
+            "",
+            "\1\u0085",
+            "\1\u0086",
+            "\1\u0087",
+            "\1\u0088",
+            "\1\u0089",
+            "\1\u008a",
+            "\1\u008b",
+            "\1\u008c",
+            "\1\u008d",
+            "\1\u008e",
+            "\1\u008f",
+            "",
+            "\1\u0090",
+            "\1\u0091",
+            "\1\u0092",
+            "\1\u0093",
+            "\1\u0094",
+            "\1\u0095",
+            "\1\u0096",
+            "\1\u0097",
+            "\1\u0098",
+            "\1\u0099",
+            "\1\u009a",
+            "\1\u009b",
+            "\1\u009c",
+            "\1\u009d",
+            "\1\u009e",
+            "\1\u009f",
+            "\1\u00a0",
+            "\1\u00a1",
+            "\1\u00a2",
+            "\1\u00a3",
+            "\1\u00a4",
+            "\1\u00a5",
+            "\1\u00a6",
+            "\1\u00a7",
+            "\1\u00a8",
+            "\1\u00a9",
+            "\1\u00aa",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00ac",
+            "\1\u00ae\12\uffff\1\u00ad",
+            "\1\u00af",
+            "\1\u00b0",
+            "\1\u00b1",
+            "\1\u00b2",
+            "\1\u00b3",
+            "\1\u00b4",
+            "\1\u00b5",
+            "\1\u00b6",
+            "\1\u00b7",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00b9",
+            "\1\u00ba",
+            "\1\u00bb",
+            "\1\u00bc",
+            "\1\u00bd",
+            "\1\u00be",
+            "",
+            "\1\u00bf",
+            "\1\u00c0",
+            "\1\u00c1",
+            "\1\u00c2",
+            "\1\u00c3",
+            "\1\u00c4",
+            "\1\u00c5",
+            "\1\u00c6",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00c9",
+            "\1\u00ca",
+            "",
+            "\1\u00cb",
+            "\1\u00cc",
+            "\1\u00cd",
+            "\1\u00ce",
+            "\1\u00cf",
+            "\1\u00d0",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00d2",
+            "\1\u00d3",
+            "\1\u00d4",
+            "\1\u00d5",
+            "\1\u00d6",
+            "\1\u00d7",
+            "\1\u00d8",
+            "",
+            "",
+            "\1\u00d9",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00db",
+            "\1\u00dc",
+            "\1\u00dd",
+            "\1\u00de",
+            "\1\u00df",
+            "\1\u00e0",
+            "",
+            "\1\u00e1",
+            "\1\u00e2",
+            "\1\u00e3",
+            "\1\u00e4",
+            "\1\u00e5",
+            "\1\u00e6",
+            "\1\u00e7",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00eb",
+            "\1\u00ec",
+            "\1\u00ed",
+            "\1\u00ee",
+            "\1\u00ef",
+            "\1\u00f0",
+            "\1\u00f1",
+            "\1\u00f2",
+            "\1\u00f3",
+            "\1\u00f4",
+            "\1\u00f5",
+            "",
+            "",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00f7",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00fa",
+            "\1\u00fb",
+            "\1\u00fc",
+            "\1\u00fd",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00ff",
+            "\1\u0100",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "",
+            "\1\u0102",
+            "\1\u0103",
+            "\1\u0104",
+            "\1\u0105",
+            "",
+            "\1\u0106",
+            "\1\u0107",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u0109",
+            "\1\u010a",
+            "\1\u010b",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u010d",
+            "",
+            "\1\u010e",
+            "\1\u010f",
+            "\1\u0110",
+            "",
+            "\1\u0111",
+            "\1\u0112",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u0114",
+            "\1\u0115",
+            "\1\u0116",
+            "",
+            "\1\u0117",
+            "\1\u0118",
+            "\1\u0119",
+            "\1\u011a",
+            "\1\u011b",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u011d",
+            "\1\u011e",
+            "",
+            "\1\u011f",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u0121",
+            "",
+            "\1\u0122",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            ""
+    };
+
+    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
+    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
+    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
+    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
+    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
+    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
+    static final short[][] DFA12_transition;
+
+    static {
+        int numStates = DFA12_transitionS.length;
+        DFA12_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+        }
+    }
+
+    class DFA12 extends DFA {
+
+        public DFA12(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 12;
+            this.eot = DFA12_eot;
+            this.eof = DFA12_eof;
+            this.min = DFA12_min;
+            this.max = DFA12_max;
+            this.accept = DFA12_accept;
+            this.special = DFA12_special;
+            this.transition = DFA12_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA12_25 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_25>='\u0000' && LA12_25<='\uFFFF')) ) {s = 55;}
+
+                        else s = 29;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_26 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_26>='\u0000' && LA12_26<='\uFFFF')) ) {s = 55;}
+
+                        else s = 29;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='u') ) {s = 1;}
+
+                        else if ( (LA12_0=='e') ) {s = 2;}
+
+                        else if ( (LA12_0=='l') ) {s = 3;}
+
+                        else if ( (LA12_0=='c') ) {s = 4;}
+
+                        else if ( (LA12_0=='o') ) {s = 5;}
+
+                        else if ( (LA12_0=='v') ) {s = 6;}
+
+                        else if ( (LA12_0=='i') ) {s = 7;}
+
+                        else if ( (LA12_0=='n') ) {s = 8;}
+
+                        else if ( (LA12_0=='a') ) {s = 9;}
+
+                        else if ( (LA12_0=='f') ) {s = 10;}
+
+                        else if ( (LA12_0=='r') ) {s = 11;}
+
+                        else if ( (LA12_0=='s') ) {s = 12;}
+
+                        else if ( (LA12_0=='p') ) {s = 13;}
+
+                        else if ( (LA12_0=='F') ) {s = 14;}
+
+                        else if ( (LA12_0=='-') ) {s = 15;}
+
+                        else if ( (LA12_0==';') ) {s = 16;}
+
+                        else if ( (LA12_0==',') ) {s = 17;}
+
+                        else if ( (LA12_0=='.') ) {s = 18;}
+
+                        else if ( (LA12_0=='{') ) {s = 19;}
+
+                        else if ( (LA12_0=='}') ) {s = 20;}
+
+                        else if ( (LA12_0=='w') ) {s = 21;}
+
+                        else if ( (LA12_0=='^') ) {s = 22;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='E')||(LA12_0>='G' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='b'||LA12_0=='d'||(LA12_0>='g' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='k')||LA12_0=='m'||LA12_0=='q'||LA12_0=='t'||(LA12_0>='x' && LA12_0<='z')) ) {s = 23;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 24;}
+
+                        else if ( (LA12_0=='\"') ) {s = 25;}
+
+                        else if ( (LA12_0=='\'') ) {s = 26;}
+
+                        else if ( (LA12_0=='/') ) {s = 27;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 28;}
+
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='+')||LA12_0==':'||(LA12_0>='<' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 29;}
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 12, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDslParser.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDslParser.java
new file mode 100644
index 0000000..36dd9db
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/contentassist/antlr/internal/InternalFlaDslParser.java
@@ -0,0 +1,9787 @@
+package org.polarsys.chess.xtext.ui.contentassist.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalFlaDslParser extends AbstractInternalContentAssistParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'undefined'", "'early'", "'late'", "'commission'", "'omission'", "'valueSubtle'", "'valueCoarse'", "'incompletion'", "'none'", "'unspecified'", "'inconsistency'", "'interference'", "'impermanence'", "'all_or_nothing'", "'all_or_compensation'", "'full_consistency'", "'range_violation_allowed'", "'serializable'", "'portable_level'", "'no_loss'", "'partial_loss_allowed'", "'FLA:'", "'->'", "';'", "','", "'.'", "'{'", "'}'", "'noFailure'", "'wildcard'"
+    };
+    public static final int RULE_STRING=6;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__37=37;
+    public static final int T__16=16;
+    public static final int T__38=38;
+    public static final int T__17=17;
+    public static final int T__39=39;
+    public static final int T__18=18;
+    public static final int T__11=11;
+    public static final int T__33=33;
+    public static final int T__12=12;
+    public static final int T__34=34;
+    public static final int T__13=13;
+    public static final int T__35=35;
+    public static final int T__14=14;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_ID=4;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int RULE_INT=5;
+    public static final int T__29=29;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__40=40;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+
+        public InternalFlaDslParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalFlaDslParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalFlaDslParser.tokenNames; }
+    public String getGrammarFileName() { return "InternalFlaDsl.g"; }
+
+
+     
+     	private FlaDslGrammarAccess grammarAccess;
+     	
+        public void setGrammarAccess(FlaDslGrammarAccess grammarAccess) {
+        	this.grammarAccess = grammarAccess;
+        }
+        
+        @Override
+        protected Grammar getGrammar() {
+        	return grammarAccess.getGrammar();
+        }
+        
+        @Override
+        protected String getValueForTokenName(String tokenName) {
+        	return tokenName;
+        }
+
+
+
+
+    // $ANTLR start "entryRuleBehaviour"
+    // InternalFlaDsl.g:60:1: entryRuleBehaviour : ruleBehaviour EOF ;
+    public final void entryRuleBehaviour() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:61:1: ( ruleBehaviour EOF )
+            // InternalFlaDsl.g:62:1: ruleBehaviour EOF
+            {
+             before(grammarAccess.getBehaviourRule()); 
+            pushFollow(FOLLOW_1);
+            ruleBehaviour();
+
+            state._fsp--;
+
+             after(grammarAccess.getBehaviourRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleBehaviour"
+
+
+    // $ANTLR start "ruleBehaviour"
+    // InternalFlaDsl.g:69:1: ruleBehaviour : ( ( ( rule__Behaviour__RulesAssignment ) ) ( ( rule__Behaviour__RulesAssignment )* ) ) ;
+    public final void ruleBehaviour() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:73:2: ( ( ( ( rule__Behaviour__RulesAssignment ) ) ( ( rule__Behaviour__RulesAssignment )* ) ) )
+            // InternalFlaDsl.g:74:1: ( ( ( rule__Behaviour__RulesAssignment ) ) ( ( rule__Behaviour__RulesAssignment )* ) )
+            {
+            // InternalFlaDsl.g:74:1: ( ( ( rule__Behaviour__RulesAssignment ) ) ( ( rule__Behaviour__RulesAssignment )* ) )
+            // InternalFlaDsl.g:75:1: ( ( rule__Behaviour__RulesAssignment ) ) ( ( rule__Behaviour__RulesAssignment )* )
+            {
+            // InternalFlaDsl.g:75:1: ( ( rule__Behaviour__RulesAssignment ) )
+            // InternalFlaDsl.g:76:1: ( rule__Behaviour__RulesAssignment )
+            {
+             before(grammarAccess.getBehaviourAccess().getRulesAssignment()); 
+            // InternalFlaDsl.g:77:1: ( rule__Behaviour__RulesAssignment )
+            // InternalFlaDsl.g:77:2: rule__Behaviour__RulesAssignment
+            {
+            pushFollow(FOLLOW_3);
+            rule__Behaviour__RulesAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBehaviourAccess().getRulesAssignment()); 
+
+            }
+
+            // InternalFlaDsl.g:80:1: ( ( rule__Behaviour__RulesAssignment )* )
+            // InternalFlaDsl.g:81:1: ( rule__Behaviour__RulesAssignment )*
+            {
+             before(grammarAccess.getBehaviourAccess().getRulesAssignment()); 
+            // InternalFlaDsl.g:82:1: ( rule__Behaviour__RulesAssignment )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==32) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // InternalFlaDsl.g:82:2: rule__Behaviour__RulesAssignment
+            	    {
+            	    pushFollow(FOLLOW_3);
+            	    rule__Behaviour__RulesAssignment();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } while (true);
+
+             after(grammarAccess.getBehaviourAccess().getRulesAssignment()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleBehaviour"
+
+
+    // $ANTLR start "entryRuleExpression"
+    // InternalFlaDsl.g:95:1: entryRuleExpression : ruleExpression EOF ;
+    public final void entryRuleExpression() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:96:1: ( ruleExpression EOF )
+            // InternalFlaDsl.g:97:1: ruleExpression EOF
+            {
+             before(grammarAccess.getExpressionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getExpressionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleExpression"
+
+
+    // $ANTLR start "ruleExpression"
+    // InternalFlaDsl.g:104:1: ruleExpression : ( ( rule__Expression__Group__0 ) ) ;
+    public final void ruleExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:108:2: ( ( ( rule__Expression__Group__0 ) ) )
+            // InternalFlaDsl.g:109:1: ( ( rule__Expression__Group__0 ) )
+            {
+            // InternalFlaDsl.g:109:1: ( ( rule__Expression__Group__0 ) )
+            // InternalFlaDsl.g:110:1: ( rule__Expression__Group__0 )
+            {
+             before(grammarAccess.getExpressionAccess().getGroup()); 
+            // InternalFlaDsl.g:111:1: ( rule__Expression__Group__0 )
+            // InternalFlaDsl.g:111:2: rule__Expression__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Expression__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExpressionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleExpression"
+
+
+    // $ANTLR start "entryRuleLhs"
+    // InternalFlaDsl.g:123:1: entryRuleLhs : ruleLhs EOF ;
+    public final void entryRuleLhs() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:124:1: ( ruleLhs EOF )
+            // InternalFlaDsl.g:125:1: ruleLhs EOF
+            {
+             before(grammarAccess.getLhsRule()); 
+            pushFollow(FOLLOW_1);
+            ruleLhs();
+
+            state._fsp--;
+
+             after(grammarAccess.getLhsRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleLhs"
+
+
+    // $ANTLR start "ruleLhs"
+    // InternalFlaDsl.g:132:1: ruleLhs : ( ( rule__Lhs__Group__0 ) ) ;
+    public final void ruleLhs() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:136:2: ( ( ( rule__Lhs__Group__0 ) ) )
+            // InternalFlaDsl.g:137:1: ( ( rule__Lhs__Group__0 ) )
+            {
+            // InternalFlaDsl.g:137:1: ( ( rule__Lhs__Group__0 ) )
+            // InternalFlaDsl.g:138:1: ( rule__Lhs__Group__0 )
+            {
+             before(grammarAccess.getLhsAccess().getGroup()); 
+            // InternalFlaDsl.g:139:1: ( rule__Lhs__Group__0 )
+            // InternalFlaDsl.g:139:2: rule__Lhs__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Lhs__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getLhsAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleLhs"
+
+
+    // $ANTLR start "entryRuleRhs"
+    // InternalFlaDsl.g:151:1: entryRuleRhs : ruleRhs EOF ;
+    public final void entryRuleRhs() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:152:1: ( ruleRhs EOF )
+            // InternalFlaDsl.g:153:1: ruleRhs EOF
+            {
+             before(grammarAccess.getRhsRule()); 
+            pushFollow(FOLLOW_1);
+            ruleRhs();
+
+            state._fsp--;
+
+             after(grammarAccess.getRhsRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRhs"
+
+
+    // $ANTLR start "ruleRhs"
+    // InternalFlaDsl.g:160:1: ruleRhs : ( ( rule__Rhs__Group__0 ) ) ;
+    public final void ruleRhs() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:164:2: ( ( ( rule__Rhs__Group__0 ) ) )
+            // InternalFlaDsl.g:165:1: ( ( rule__Rhs__Group__0 ) )
+            {
+            // InternalFlaDsl.g:165:1: ( ( rule__Rhs__Group__0 ) )
+            // InternalFlaDsl.g:166:1: ( rule__Rhs__Group__0 )
+            {
+             before(grammarAccess.getRhsAccess().getGroup()); 
+            // InternalFlaDsl.g:167:1: ( rule__Rhs__Group__0 )
+            // InternalFlaDsl.g:167:2: rule__Rhs__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Rhs__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRhsAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRhs"
+
+
+    // $ANTLR start "entryRuleInputExpression"
+    // InternalFlaDsl.g:179:1: entryRuleInputExpression : ruleInputExpression EOF ;
+    public final void entryRuleInputExpression() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:180:1: ( ruleInputExpression EOF )
+            // InternalFlaDsl.g:181:1: ruleInputExpression EOF
+            {
+             before(grammarAccess.getInputExpressionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleInputExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getInputExpressionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleInputExpression"
+
+
+    // $ANTLR start "ruleInputExpression"
+    // InternalFlaDsl.g:188:1: ruleInputExpression : ( ( rule__InputExpression__Group__0 ) ) ;
+    public final void ruleInputExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:192:2: ( ( ( rule__InputExpression__Group__0 ) ) )
+            // InternalFlaDsl.g:193:1: ( ( rule__InputExpression__Group__0 ) )
+            {
+            // InternalFlaDsl.g:193:1: ( ( rule__InputExpression__Group__0 ) )
+            // InternalFlaDsl.g:194:1: ( rule__InputExpression__Group__0 )
+            {
+             before(grammarAccess.getInputExpressionAccess().getGroup()); 
+            // InternalFlaDsl.g:195:1: ( rule__InputExpression__Group__0 )
+            // InternalFlaDsl.g:195:2: rule__InputExpression__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__InputExpression__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInputExpressionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleInputExpression"
+
+
+    // $ANTLR start "entryRuleOutputExpression"
+    // InternalFlaDsl.g:207:1: entryRuleOutputExpression : ruleOutputExpression EOF ;
+    public final void entryRuleOutputExpression() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:208:1: ( ruleOutputExpression EOF )
+            // InternalFlaDsl.g:209:1: ruleOutputExpression EOF
+            {
+             before(grammarAccess.getOutputExpressionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleOutputExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutputExpressionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleOutputExpression"
+
+
+    // $ANTLR start "ruleOutputExpression"
+    // InternalFlaDsl.g:216:1: ruleOutputExpression : ( ( rule__OutputExpression__Group__0 ) ) ;
+    public final void ruleOutputExpression() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:220:2: ( ( ( rule__OutputExpression__Group__0 ) ) )
+            // InternalFlaDsl.g:221:1: ( ( rule__OutputExpression__Group__0 ) )
+            {
+            // InternalFlaDsl.g:221:1: ( ( rule__OutputExpression__Group__0 ) )
+            // InternalFlaDsl.g:222:1: ( rule__OutputExpression__Group__0 )
+            {
+             before(grammarAccess.getOutputExpressionAccess().getGroup()); 
+            // InternalFlaDsl.g:223:1: ( rule__OutputExpression__Group__0 )
+            // InternalFlaDsl.g:223:2: rule__OutputExpression__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutputExpression__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutputExpressionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleOutputExpression"
+
+
+    // $ANTLR start "entryRuleInFailureExpr"
+    // InternalFlaDsl.g:235:1: entryRuleInFailureExpr : ruleInFailureExpr EOF ;
+    public final void entryRuleInFailureExpr() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:236:1: ( ruleInFailureExpr EOF )
+            // InternalFlaDsl.g:237:1: ruleInFailureExpr EOF
+            {
+             before(grammarAccess.getInFailureExprRule()); 
+            pushFollow(FOLLOW_1);
+            ruleInFailureExpr();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleInFailureExpr"
+
+
+    // $ANTLR start "ruleInFailureExpr"
+    // InternalFlaDsl.g:244:1: ruleInFailureExpr : ( ( rule__InFailureExpr__Alternatives ) ) ;
+    public final void ruleInFailureExpr() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:248:2: ( ( ( rule__InFailureExpr__Alternatives ) ) )
+            // InternalFlaDsl.g:249:1: ( ( rule__InFailureExpr__Alternatives ) )
+            {
+            // InternalFlaDsl.g:249:1: ( ( rule__InFailureExpr__Alternatives ) )
+            // InternalFlaDsl.g:250:1: ( rule__InFailureExpr__Alternatives )
+            {
+             before(grammarAccess.getInFailureExprAccess().getAlternatives()); 
+            // InternalFlaDsl.g:251:1: ( rule__InFailureExpr__Alternatives )
+            // InternalFlaDsl.g:251:2: rule__InFailureExpr__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInFailureExprAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleInFailureExpr"
+
+
+    // $ANTLR start "entryRuleOutFailureExpr"
+    // InternalFlaDsl.g:263:1: entryRuleOutFailureExpr : ruleOutFailureExpr EOF ;
+    public final void entryRuleOutFailureExpr() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:264:1: ( ruleOutFailureExpr EOF )
+            // InternalFlaDsl.g:265:1: ruleOutFailureExpr EOF
+            {
+             before(grammarAccess.getOutFailureExprRule()); 
+            pushFollow(FOLLOW_1);
+            ruleOutFailureExpr();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleOutFailureExpr"
+
+
+    // $ANTLR start "ruleOutFailureExpr"
+    // InternalFlaDsl.g:272:1: ruleOutFailureExpr : ( ( rule__OutFailureExpr__Alternatives ) ) ;
+    public final void ruleOutFailureExpr() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:276:2: ( ( ( rule__OutFailureExpr__Alternatives ) ) )
+            // InternalFlaDsl.g:277:1: ( ( rule__OutFailureExpr__Alternatives ) )
+            {
+            // InternalFlaDsl.g:277:1: ( ( rule__OutFailureExpr__Alternatives ) )
+            // InternalFlaDsl.g:278:1: ( rule__OutFailureExpr__Alternatives )
+            {
+             before(grammarAccess.getOutFailureExprAccess().getAlternatives()); 
+            // InternalFlaDsl.g:279:1: ( rule__OutFailureExpr__Alternatives )
+            // InternalFlaDsl.g:279:2: rule__OutFailureExpr__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutFailureExprAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleOutFailureExpr"
+
+
+    // $ANTLR start "entryRuleFailureDefinition"
+    // InternalFlaDsl.g:293:1: entryRuleFailureDefinition : ruleFailureDefinition EOF ;
+    public final void entryRuleFailureDefinition() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:294:1: ( ruleFailureDefinition EOF )
+            // InternalFlaDsl.g:295:1: ruleFailureDefinition EOF
+            {
+             before(grammarAccess.getFailureDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getFailureDefinitionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleFailureDefinition"
+
+
+    // $ANTLR start "ruleFailureDefinition"
+    // InternalFlaDsl.g:302:1: ruleFailureDefinition : ( ( rule__FailureDefinition__Group__0 ) ) ;
+    public final void ruleFailureDefinition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:306:2: ( ( ( rule__FailureDefinition__Group__0 ) ) )
+            // InternalFlaDsl.g:307:1: ( ( rule__FailureDefinition__Group__0 ) )
+            {
+            // InternalFlaDsl.g:307:1: ( ( rule__FailureDefinition__Group__0 ) )
+            // InternalFlaDsl.g:308:1: ( rule__FailureDefinition__Group__0 )
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getGroup()); 
+            // InternalFlaDsl.g:309:1: ( rule__FailureDefinition__Group__0 )
+            // InternalFlaDsl.g:309:2: rule__FailureDefinition__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFailureDefinitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleFailureDefinition"
+
+
+    // $ANTLR start "entryRuleNoFailureDefinition"
+    // InternalFlaDsl.g:321:1: entryRuleNoFailureDefinition : ruleNoFailureDefinition EOF ;
+    public final void entryRuleNoFailureDefinition() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:322:1: ( ruleNoFailureDefinition EOF )
+            // InternalFlaDsl.g:323:1: ruleNoFailureDefinition EOF
+            {
+             before(grammarAccess.getNoFailureDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleNoFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getNoFailureDefinitionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleNoFailureDefinition"
+
+
+    // $ANTLR start "ruleNoFailureDefinition"
+    // InternalFlaDsl.g:330:1: ruleNoFailureDefinition : ( ( rule__NoFailureDefinition__Group__0 ) ) ;
+    public final void ruleNoFailureDefinition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:334:2: ( ( ( rule__NoFailureDefinition__Group__0 ) ) )
+            // InternalFlaDsl.g:335:1: ( ( rule__NoFailureDefinition__Group__0 ) )
+            {
+            // InternalFlaDsl.g:335:1: ( ( rule__NoFailureDefinition__Group__0 ) )
+            // InternalFlaDsl.g:336:1: ( rule__NoFailureDefinition__Group__0 )
+            {
+             before(grammarAccess.getNoFailureDefinitionAccess().getGroup()); 
+            // InternalFlaDsl.g:337:1: ( rule__NoFailureDefinition__Group__0 )
+            // InternalFlaDsl.g:337:2: rule__NoFailureDefinition__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__NoFailureDefinition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getNoFailureDefinitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleNoFailureDefinition"
+
+
+    // $ANTLR start "entryRuleComplexNofailureDefinition"
+    // InternalFlaDsl.g:349:1: entryRuleComplexNofailureDefinition : ruleComplexNofailureDefinition EOF ;
+    public final void entryRuleComplexNofailureDefinition() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:350:1: ( ruleComplexNofailureDefinition EOF )
+            // InternalFlaDsl.g:351:1: ruleComplexNofailureDefinition EOF
+            {
+             before(grammarAccess.getComplexNofailureDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleComplexNofailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getComplexNofailureDefinitionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleComplexNofailureDefinition"
+
+
+    // $ANTLR start "ruleComplexNofailureDefinition"
+    // InternalFlaDsl.g:358:1: ruleComplexNofailureDefinition : ( ( rule__ComplexNofailureDefinition__Group__0 ) ) ;
+    public final void ruleComplexNofailureDefinition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:362:2: ( ( ( rule__ComplexNofailureDefinition__Group__0 ) ) )
+            // InternalFlaDsl.g:363:1: ( ( rule__ComplexNofailureDefinition__Group__0 ) )
+            {
+            // InternalFlaDsl.g:363:1: ( ( rule__ComplexNofailureDefinition__Group__0 ) )
+            // InternalFlaDsl.g:364:1: ( rule__ComplexNofailureDefinition__Group__0 )
+            {
+             before(grammarAccess.getComplexNofailureDefinitionAccess().getGroup()); 
+            // InternalFlaDsl.g:365:1: ( rule__ComplexNofailureDefinition__Group__0 )
+            // InternalFlaDsl.g:365:2: rule__ComplexNofailureDefinition__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__ComplexNofailureDefinition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getComplexNofailureDefinitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleComplexNofailureDefinition"
+
+
+    // $ANTLR start "entryRuleWildcardDefinition"
+    // InternalFlaDsl.g:377:1: entryRuleWildcardDefinition : ruleWildcardDefinition EOF ;
+    public final void entryRuleWildcardDefinition() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:378:1: ( ruleWildcardDefinition EOF )
+            // InternalFlaDsl.g:379:1: ruleWildcardDefinition EOF
+            {
+             before(grammarAccess.getWildcardDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleWildcardDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getWildcardDefinitionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleWildcardDefinition"
+
+
+    // $ANTLR start "ruleWildcardDefinition"
+    // InternalFlaDsl.g:386:1: ruleWildcardDefinition : ( ( rule__WildcardDefinition__Group__0 ) ) ;
+    public final void ruleWildcardDefinition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:390:2: ( ( ( rule__WildcardDefinition__Group__0 ) ) )
+            // InternalFlaDsl.g:391:1: ( ( rule__WildcardDefinition__Group__0 ) )
+            {
+            // InternalFlaDsl.g:391:1: ( ( rule__WildcardDefinition__Group__0 ) )
+            // InternalFlaDsl.g:392:1: ( rule__WildcardDefinition__Group__0 )
+            {
+             before(grammarAccess.getWildcardDefinitionAccess().getGroup()); 
+            // InternalFlaDsl.g:393:1: ( rule__WildcardDefinition__Group__0 )
+            // InternalFlaDsl.g:393:2: rule__WildcardDefinition__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__WildcardDefinition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getWildcardDefinitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleWildcardDefinition"
+
+
+    // $ANTLR start "entryRuleVariableDefinition"
+    // InternalFlaDsl.g:405:1: entryRuleVariableDefinition : ruleVariableDefinition EOF ;
+    public final void entryRuleVariableDefinition() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:406:1: ( ruleVariableDefinition EOF )
+            // InternalFlaDsl.g:407:1: ruleVariableDefinition EOF
+            {
+             before(grammarAccess.getVariableDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            ruleVariableDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getVariableDefinitionRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleVariableDefinition"
+
+
+    // $ANTLR start "ruleVariableDefinition"
+    // InternalFlaDsl.g:414:1: ruleVariableDefinition : ( ( rule__VariableDefinition__Group__0 ) ) ;
+    public final void ruleVariableDefinition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:418:2: ( ( ( rule__VariableDefinition__Group__0 ) ) )
+            // InternalFlaDsl.g:419:1: ( ( rule__VariableDefinition__Group__0 ) )
+            {
+            // InternalFlaDsl.g:419:1: ( ( rule__VariableDefinition__Group__0 ) )
+            // InternalFlaDsl.g:420:1: ( rule__VariableDefinition__Group__0 )
+            {
+             before(grammarAccess.getVariableDefinitionAccess().getGroup()); 
+            // InternalFlaDsl.g:421:1: ( rule__VariableDefinition__Group__0 )
+            // InternalFlaDsl.g:421:2: rule__VariableDefinition__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__VariableDefinition__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getVariableDefinitionAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleVariableDefinition"
+
+
+    // $ANTLR start "entryRuleACIDavoidable"
+    // InternalFlaDsl.g:433:1: entryRuleACIDavoidable : ruleACIDavoidable EOF ;
+    public final void entryRuleACIDavoidable() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:434:1: ( ruleACIDavoidable EOF )
+            // InternalFlaDsl.g:435:1: ruleACIDavoidable EOF
+            {
+             before(grammarAccess.getACIDavoidableRule()); 
+            pushFollow(FOLLOW_1);
+            ruleACIDavoidable();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDavoidableRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleACIDavoidable"
+
+
+    // $ANTLR start "ruleACIDavoidable"
+    // InternalFlaDsl.g:442:1: ruleACIDavoidable : ( ( rule__ACIDavoidable__Group__0 ) ) ;
+    public final void ruleACIDavoidable() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:446:2: ( ( ( rule__ACIDavoidable__Group__0 ) ) )
+            // InternalFlaDsl.g:447:1: ( ( rule__ACIDavoidable__Group__0 ) )
+            {
+            // InternalFlaDsl.g:447:1: ( ( rule__ACIDavoidable__Group__0 ) )
+            // InternalFlaDsl.g:448:1: ( rule__ACIDavoidable__Group__0 )
+            {
+             before(grammarAccess.getACIDavoidableAccess().getGroup()); 
+            // InternalFlaDsl.g:449:1: ( rule__ACIDavoidable__Group__0 )
+            // InternalFlaDsl.g:449:2: rule__ACIDavoidable__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDavoidableAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleACIDavoidable"
+
+
+    // $ANTLR start "entryRuleACIDMitigation"
+    // InternalFlaDsl.g:461:1: entryRuleACIDMitigation : ruleACIDMitigation EOF ;
+    public final void entryRuleACIDMitigation() throws RecognitionException {
+        try {
+            // InternalFlaDsl.g:462:1: ( ruleACIDMitigation EOF )
+            // InternalFlaDsl.g:463:1: ruleACIDMitigation EOF
+            {
+             before(grammarAccess.getACIDMitigationRule()); 
+            pushFollow(FOLLOW_1);
+            ruleACIDMitigation();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDMitigationRule()); 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleACIDMitigation"
+
+
+    // $ANTLR start "ruleACIDMitigation"
+    // InternalFlaDsl.g:470:1: ruleACIDMitigation : ( ( rule__ACIDMitigation__Group__0 ) ) ;
+    public final void ruleACIDMitigation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:474:2: ( ( ( rule__ACIDMitigation__Group__0 ) ) )
+            // InternalFlaDsl.g:475:1: ( ( rule__ACIDMitigation__Group__0 ) )
+            {
+            // InternalFlaDsl.g:475:1: ( ( rule__ACIDMitigation__Group__0 ) )
+            // InternalFlaDsl.g:476:1: ( rule__ACIDMitigation__Group__0 )
+            {
+             before(grammarAccess.getACIDMitigationAccess().getGroup()); 
+            // InternalFlaDsl.g:477:1: ( rule__ACIDMitigation__Group__0 )
+            // InternalFlaDsl.g:477:2: rule__ACIDMitigation__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDMitigationAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleACIDMitigation"
+
+
+    // $ANTLR start "ruleActualFailureType"
+    // InternalFlaDsl.g:494:1: ruleActualFailureType : ( ( rule__ActualFailureType__Alternatives ) ) ;
+    public final void ruleActualFailureType() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:498:1: ( ( ( rule__ActualFailureType__Alternatives ) ) )
+            // InternalFlaDsl.g:499:1: ( ( rule__ActualFailureType__Alternatives ) )
+            {
+            // InternalFlaDsl.g:499:1: ( ( rule__ActualFailureType__Alternatives ) )
+            // InternalFlaDsl.g:500:1: ( rule__ActualFailureType__Alternatives )
+            {
+             before(grammarAccess.getActualFailureTypeAccess().getAlternatives()); 
+            // InternalFlaDsl.g:501:1: ( rule__ActualFailureType__Alternatives )
+            // InternalFlaDsl.g:501:2: rule__ActualFailureType__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__ActualFailureType__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getActualFailureTypeAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleActualFailureType"
+
+
+    // $ANTLR start "ruleAavoidable"
+    // InternalFlaDsl.g:517:1: ruleAavoidable : ( ( rule__Aavoidable__Alternatives ) ) ;
+    public final void ruleAavoidable() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:521:1: ( ( ( rule__Aavoidable__Alternatives ) ) )
+            // InternalFlaDsl.g:522:1: ( ( rule__Aavoidable__Alternatives ) )
+            {
+            // InternalFlaDsl.g:522:1: ( ( rule__Aavoidable__Alternatives ) )
+            // InternalFlaDsl.g:523:1: ( rule__Aavoidable__Alternatives )
+            {
+             before(grammarAccess.getAavoidableAccess().getAlternatives()); 
+            // InternalFlaDsl.g:524:1: ( rule__Aavoidable__Alternatives )
+            // InternalFlaDsl.g:524:2: rule__Aavoidable__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Aavoidable__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getAavoidableAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleAavoidable"
+
+
+    // $ANTLR start "ruleCavoidable"
+    // InternalFlaDsl.g:536:1: ruleCavoidable : ( ( rule__Cavoidable__Alternatives ) ) ;
+    public final void ruleCavoidable() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:540:1: ( ( ( rule__Cavoidable__Alternatives ) ) )
+            // InternalFlaDsl.g:541:1: ( ( rule__Cavoidable__Alternatives ) )
+            {
+            // InternalFlaDsl.g:541:1: ( ( rule__Cavoidable__Alternatives ) )
+            // InternalFlaDsl.g:542:1: ( rule__Cavoidable__Alternatives )
+            {
+             before(grammarAccess.getCavoidableAccess().getAlternatives()); 
+            // InternalFlaDsl.g:543:1: ( rule__Cavoidable__Alternatives )
+            // InternalFlaDsl.g:543:2: rule__Cavoidable__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Cavoidable__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCavoidableAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCavoidable"
+
+
+    // $ANTLR start "ruleIavoidable"
+    // InternalFlaDsl.g:555:1: ruleIavoidable : ( ( rule__Iavoidable__Alternatives ) ) ;
+    public final void ruleIavoidable() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:559:1: ( ( ( rule__Iavoidable__Alternatives ) ) )
+            // InternalFlaDsl.g:560:1: ( ( rule__Iavoidable__Alternatives ) )
+            {
+            // InternalFlaDsl.g:560:1: ( ( rule__Iavoidable__Alternatives ) )
+            // InternalFlaDsl.g:561:1: ( rule__Iavoidable__Alternatives )
+            {
+             before(grammarAccess.getIavoidableAccess().getAlternatives()); 
+            // InternalFlaDsl.g:562:1: ( rule__Iavoidable__Alternatives )
+            // InternalFlaDsl.g:562:2: rule__Iavoidable__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Iavoidable__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getIavoidableAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleIavoidable"
+
+
+    // $ANTLR start "ruleDavoidable"
+    // InternalFlaDsl.g:574:1: ruleDavoidable : ( ( rule__Davoidable__Alternatives ) ) ;
+    public final void ruleDavoidable() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:578:1: ( ( ( rule__Davoidable__Alternatives ) ) )
+            // InternalFlaDsl.g:579:1: ( ( rule__Davoidable__Alternatives ) )
+            {
+            // InternalFlaDsl.g:579:1: ( ( rule__Davoidable__Alternatives ) )
+            // InternalFlaDsl.g:580:1: ( rule__Davoidable__Alternatives )
+            {
+             before(grammarAccess.getDavoidableAccess().getAlternatives()); 
+            // InternalFlaDsl.g:581:1: ( rule__Davoidable__Alternatives )
+            // InternalFlaDsl.g:581:2: rule__Davoidable__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Davoidable__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDavoidableAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDavoidable"
+
+
+    // $ANTLR start "ruleAmitigation"
+    // InternalFlaDsl.g:593:1: ruleAmitigation : ( ( rule__Amitigation__Alternatives ) ) ;
+    public final void ruleAmitigation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:597:1: ( ( ( rule__Amitigation__Alternatives ) ) )
+            // InternalFlaDsl.g:598:1: ( ( rule__Amitigation__Alternatives ) )
+            {
+            // InternalFlaDsl.g:598:1: ( ( rule__Amitigation__Alternatives ) )
+            // InternalFlaDsl.g:599:1: ( rule__Amitigation__Alternatives )
+            {
+             before(grammarAccess.getAmitigationAccess().getAlternatives()); 
+            // InternalFlaDsl.g:600:1: ( rule__Amitigation__Alternatives )
+            // InternalFlaDsl.g:600:2: rule__Amitigation__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Amitigation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getAmitigationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleAmitigation"
+
+
+    // $ANTLR start "ruleCmitigation"
+    // InternalFlaDsl.g:612:1: ruleCmitigation : ( ( rule__Cmitigation__Alternatives ) ) ;
+    public final void ruleCmitigation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:616:1: ( ( ( rule__Cmitigation__Alternatives ) ) )
+            // InternalFlaDsl.g:617:1: ( ( rule__Cmitigation__Alternatives ) )
+            {
+            // InternalFlaDsl.g:617:1: ( ( rule__Cmitigation__Alternatives ) )
+            // InternalFlaDsl.g:618:1: ( rule__Cmitigation__Alternatives )
+            {
+             before(grammarAccess.getCmitigationAccess().getAlternatives()); 
+            // InternalFlaDsl.g:619:1: ( rule__Cmitigation__Alternatives )
+            // InternalFlaDsl.g:619:2: rule__Cmitigation__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Cmitigation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getCmitigationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCmitigation"
+
+
+    // $ANTLR start "ruleImitigation"
+    // InternalFlaDsl.g:631:1: ruleImitigation : ( ( rule__Imitigation__Alternatives ) ) ;
+    public final void ruleImitigation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:635:1: ( ( ( rule__Imitigation__Alternatives ) ) )
+            // InternalFlaDsl.g:636:1: ( ( rule__Imitigation__Alternatives ) )
+            {
+            // InternalFlaDsl.g:636:1: ( ( rule__Imitigation__Alternatives ) )
+            // InternalFlaDsl.g:637:1: ( rule__Imitigation__Alternatives )
+            {
+             before(grammarAccess.getImitigationAccess().getAlternatives()); 
+            // InternalFlaDsl.g:638:1: ( rule__Imitigation__Alternatives )
+            // InternalFlaDsl.g:638:2: rule__Imitigation__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Imitigation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getImitigationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleImitigation"
+
+
+    // $ANTLR start "ruleDmitigation"
+    // InternalFlaDsl.g:650:1: ruleDmitigation : ( ( rule__Dmitigation__Alternatives ) ) ;
+    public final void ruleDmitigation() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:654:1: ( ( ( rule__Dmitigation__Alternatives ) ) )
+            // InternalFlaDsl.g:655:1: ( ( rule__Dmitigation__Alternatives ) )
+            {
+            // InternalFlaDsl.g:655:1: ( ( rule__Dmitigation__Alternatives ) )
+            // InternalFlaDsl.g:656:1: ( rule__Dmitigation__Alternatives )
+            {
+             before(grammarAccess.getDmitigationAccess().getAlternatives()); 
+            // InternalFlaDsl.g:657:1: ( rule__Dmitigation__Alternatives )
+            // InternalFlaDsl.g:657:2: rule__Dmitigation__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__Dmitigation__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDmitigationAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDmitigation"
+
+
+    // $ANTLR start "rule__InputExpression__Alternatives_0"
+    // InternalFlaDsl.g:668:1: rule__InputExpression__Alternatives_0 : ( ( ( rule__InputExpression__RefAssignment_0_0 ) ) | ( 'undefined' ) );
+    public final void rule__InputExpression__Alternatives_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:672:1: ( ( ( rule__InputExpression__RefAssignment_0_0 ) ) | ( 'undefined' ) )
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==RULE_ID) ) {
+                alt2=1;
+            }
+            else if ( (LA2_0==11) ) {
+                alt2=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 2, 0, input);
+
+                throw nvae;
+            }
+            switch (alt2) {
+                case 1 :
+                    // InternalFlaDsl.g:673:1: ( ( rule__InputExpression__RefAssignment_0_0 ) )
+                    {
+                    // InternalFlaDsl.g:673:1: ( ( rule__InputExpression__RefAssignment_0_0 ) )
+                    // InternalFlaDsl.g:674:1: ( rule__InputExpression__RefAssignment_0_0 )
+                    {
+                     before(grammarAccess.getInputExpressionAccess().getRefAssignment_0_0()); 
+                    // InternalFlaDsl.g:675:1: ( rule__InputExpression__RefAssignment_0_0 )
+                    // InternalFlaDsl.g:675:2: rule__InputExpression__RefAssignment_0_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__InputExpression__RefAssignment_0_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getInputExpressionAccess().getRefAssignment_0_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:679:6: ( 'undefined' )
+                    {
+                    // InternalFlaDsl.g:679:6: ( 'undefined' )
+                    // InternalFlaDsl.g:680:1: 'undefined'
+                    {
+                     before(grammarAccess.getInputExpressionAccess().getUndefinedKeyword_0_1()); 
+                    match(input,11,FOLLOW_2); 
+                     after(grammarAccess.getInputExpressionAccess().getUndefinedKeyword_0_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Alternatives_0"
+
+
+    // $ANTLR start "rule__OutputExpression__Alternatives_0"
+    // InternalFlaDsl.g:692:1: rule__OutputExpression__Alternatives_0 : ( ( ( rule__OutputExpression__RefAssignment_0_0 ) ) | ( 'undefined' ) );
+    public final void rule__OutputExpression__Alternatives_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:696:1: ( ( ( rule__OutputExpression__RefAssignment_0_0 ) ) | ( 'undefined' ) )
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==RULE_ID) ) {
+                alt3=1;
+            }
+            else if ( (LA3_0==11) ) {
+                alt3=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+            switch (alt3) {
+                case 1 :
+                    // InternalFlaDsl.g:697:1: ( ( rule__OutputExpression__RefAssignment_0_0 ) )
+                    {
+                    // InternalFlaDsl.g:697:1: ( ( rule__OutputExpression__RefAssignment_0_0 ) )
+                    // InternalFlaDsl.g:698:1: ( rule__OutputExpression__RefAssignment_0_0 )
+                    {
+                     before(grammarAccess.getOutputExpressionAccess().getRefAssignment_0_0()); 
+                    // InternalFlaDsl.g:699:1: ( rule__OutputExpression__RefAssignment_0_0 )
+                    // InternalFlaDsl.g:699:2: rule__OutputExpression__RefAssignment_0_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__OutputExpression__RefAssignment_0_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getOutputExpressionAccess().getRefAssignment_0_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:703:6: ( 'undefined' )
+                    {
+                    // InternalFlaDsl.g:703:6: ( 'undefined' )
+                    // InternalFlaDsl.g:704:1: 'undefined'
+                    {
+                     before(grammarAccess.getOutputExpressionAccess().getUndefinedKeyword_0_1()); 
+                    match(input,11,FOLLOW_2); 
+                     after(grammarAccess.getOutputExpressionAccess().getUndefinedKeyword_0_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Alternatives_0"
+
+
+    // $ANTLR start "rule__InFailureExpr__Alternatives"
+    // InternalFlaDsl.g:716:1: rule__InFailureExpr__Alternatives : ( ( ( rule__InFailureExpr__FailuresAssignment_0 ) ) | ( ( rule__InFailureExpr__FailuresAssignment_1 ) ) | ( ( rule__InFailureExpr__FailuresAssignment_2 ) ) | ( ( rule__InFailureExpr__Group_3__0 ) ) | ( ( rule__InFailureExpr__FailuresAssignment_4 ) ) );
+    public final void rule__InFailureExpr__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:720:1: ( ( ( rule__InFailureExpr__FailuresAssignment_0 ) ) | ( ( rule__InFailureExpr__FailuresAssignment_1 ) ) | ( ( rule__InFailureExpr__FailuresAssignment_2 ) ) | ( ( rule__InFailureExpr__Group_3__0 ) ) | ( ( rule__InFailureExpr__FailuresAssignment_4 ) ) )
+            int alt4=5;
+            switch ( input.LA(1) ) {
+            case 40:
+                {
+                alt4=1;
+                }
+                break;
+            case 39:
+                {
+                alt4=2;
+                }
+                break;
+            case 12:
+            case 13:
+            case 14:
+            case 15:
+            case 16:
+            case 17:
+                {
+                alt4=3;
+                }
+                break;
+            case 37:
+                {
+                alt4=4;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt4=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 4, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt4) {
+                case 1 :
+                    // InternalFlaDsl.g:721:1: ( ( rule__InFailureExpr__FailuresAssignment_0 ) )
+                    {
+                    // InternalFlaDsl.g:721:1: ( ( rule__InFailureExpr__FailuresAssignment_0 ) )
+                    // InternalFlaDsl.g:722:1: ( rule__InFailureExpr__FailuresAssignment_0 )
+                    {
+                     before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_0()); 
+                    // InternalFlaDsl.g:723:1: ( rule__InFailureExpr__FailuresAssignment_0 )
+                    // InternalFlaDsl.g:723:2: rule__InFailureExpr__FailuresAssignment_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__InFailureExpr__FailuresAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:727:6: ( ( rule__InFailureExpr__FailuresAssignment_1 ) )
+                    {
+                    // InternalFlaDsl.g:727:6: ( ( rule__InFailureExpr__FailuresAssignment_1 ) )
+                    // InternalFlaDsl.g:728:1: ( rule__InFailureExpr__FailuresAssignment_1 )
+                    {
+                     before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_1()); 
+                    // InternalFlaDsl.g:729:1: ( rule__InFailureExpr__FailuresAssignment_1 )
+                    // InternalFlaDsl.g:729:2: rule__InFailureExpr__FailuresAssignment_1
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__InFailureExpr__FailuresAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:733:6: ( ( rule__InFailureExpr__FailuresAssignment_2 ) )
+                    {
+                    // InternalFlaDsl.g:733:6: ( ( rule__InFailureExpr__FailuresAssignment_2 ) )
+                    // InternalFlaDsl.g:734:1: ( rule__InFailureExpr__FailuresAssignment_2 )
+                    {
+                     before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_2()); 
+                    // InternalFlaDsl.g:735:1: ( rule__InFailureExpr__FailuresAssignment_2 )
+                    // InternalFlaDsl.g:735:2: rule__InFailureExpr__FailuresAssignment_2
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__InFailureExpr__FailuresAssignment_2();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:739:6: ( ( rule__InFailureExpr__Group_3__0 ) )
+                    {
+                    // InternalFlaDsl.g:739:6: ( ( rule__InFailureExpr__Group_3__0 ) )
+                    // InternalFlaDsl.g:740:1: ( rule__InFailureExpr__Group_3__0 )
+                    {
+                     before(grammarAccess.getInFailureExprAccess().getGroup_3()); 
+                    // InternalFlaDsl.g:741:1: ( rule__InFailureExpr__Group_3__0 )
+                    // InternalFlaDsl.g:741:2: rule__InFailureExpr__Group_3__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__InFailureExpr__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getInFailureExprAccess().getGroup_3()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // InternalFlaDsl.g:745:6: ( ( rule__InFailureExpr__FailuresAssignment_4 ) )
+                    {
+                    // InternalFlaDsl.g:745:6: ( ( rule__InFailureExpr__FailuresAssignment_4 ) )
+                    // InternalFlaDsl.g:746:1: ( rule__InFailureExpr__FailuresAssignment_4 )
+                    {
+                     before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_4()); 
+                    // InternalFlaDsl.g:747:1: ( rule__InFailureExpr__FailuresAssignment_4 )
+                    // InternalFlaDsl.g:747:2: rule__InFailureExpr__FailuresAssignment_4
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__InFailureExpr__FailuresAssignment_4();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_4()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Alternatives"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Alternatives"
+    // InternalFlaDsl.g:756:1: rule__OutFailureExpr__Alternatives : ( ( ( rule__OutFailureExpr__FailuresAssignment_0 ) ) | ( ( rule__OutFailureExpr__FailuresAssignment_1 ) ) | ( ( rule__OutFailureExpr__FailuresAssignment_2 ) ) | ( ( rule__OutFailureExpr__Group_3__0 ) ) | ( ( rule__OutFailureExpr__FailuresAssignment_4 ) ) );
+    public final void rule__OutFailureExpr__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:760:1: ( ( ( rule__OutFailureExpr__FailuresAssignment_0 ) ) | ( ( rule__OutFailureExpr__FailuresAssignment_1 ) ) | ( ( rule__OutFailureExpr__FailuresAssignment_2 ) ) | ( ( rule__OutFailureExpr__Group_3__0 ) ) | ( ( rule__OutFailureExpr__FailuresAssignment_4 ) ) )
+            int alt5=5;
+            switch ( input.LA(1) ) {
+            case 39:
+                {
+                int LA5_1 = input.LA(2);
+
+                if ( (LA5_1==EOF||(LA5_1>=34 && LA5_1<=35)) ) {
+                    alt5=1;
+                }
+                else if ( (LA5_1==36) ) {
+                    alt5=2;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 5, 1, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case 12:
+            case 13:
+            case 14:
+            case 15:
+            case 16:
+            case 17:
+                {
+                alt5=3;
+                }
+                break;
+            case 37:
+                {
+                alt5=4;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt5=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 5, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt5) {
+                case 1 :
+                    // InternalFlaDsl.g:761:1: ( ( rule__OutFailureExpr__FailuresAssignment_0 ) )
+                    {
+                    // InternalFlaDsl.g:761:1: ( ( rule__OutFailureExpr__FailuresAssignment_0 ) )
+                    // InternalFlaDsl.g:762:1: ( rule__OutFailureExpr__FailuresAssignment_0 )
+                    {
+                     before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_0()); 
+                    // InternalFlaDsl.g:763:1: ( rule__OutFailureExpr__FailuresAssignment_0 )
+                    // InternalFlaDsl.g:763:2: rule__OutFailureExpr__FailuresAssignment_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__OutFailureExpr__FailuresAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:767:6: ( ( rule__OutFailureExpr__FailuresAssignment_1 ) )
+                    {
+                    // InternalFlaDsl.g:767:6: ( ( rule__OutFailureExpr__FailuresAssignment_1 ) )
+                    // InternalFlaDsl.g:768:1: ( rule__OutFailureExpr__FailuresAssignment_1 )
+                    {
+                     before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_1()); 
+                    // InternalFlaDsl.g:769:1: ( rule__OutFailureExpr__FailuresAssignment_1 )
+                    // InternalFlaDsl.g:769:2: rule__OutFailureExpr__FailuresAssignment_1
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__OutFailureExpr__FailuresAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:773:6: ( ( rule__OutFailureExpr__FailuresAssignment_2 ) )
+                    {
+                    // InternalFlaDsl.g:773:6: ( ( rule__OutFailureExpr__FailuresAssignment_2 ) )
+                    // InternalFlaDsl.g:774:1: ( rule__OutFailureExpr__FailuresAssignment_2 )
+                    {
+                     before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_2()); 
+                    // InternalFlaDsl.g:775:1: ( rule__OutFailureExpr__FailuresAssignment_2 )
+                    // InternalFlaDsl.g:775:2: rule__OutFailureExpr__FailuresAssignment_2
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__OutFailureExpr__FailuresAssignment_2();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:779:6: ( ( rule__OutFailureExpr__Group_3__0 ) )
+                    {
+                    // InternalFlaDsl.g:779:6: ( ( rule__OutFailureExpr__Group_3__0 ) )
+                    // InternalFlaDsl.g:780:1: ( rule__OutFailureExpr__Group_3__0 )
+                    {
+                     before(grammarAccess.getOutFailureExprAccess().getGroup_3()); 
+                    // InternalFlaDsl.g:781:1: ( rule__OutFailureExpr__Group_3__0 )
+                    // InternalFlaDsl.g:781:2: rule__OutFailureExpr__Group_3__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__OutFailureExpr__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getOutFailureExprAccess().getGroup_3()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // InternalFlaDsl.g:785:6: ( ( rule__OutFailureExpr__FailuresAssignment_4 ) )
+                    {
+                    // InternalFlaDsl.g:785:6: ( ( rule__OutFailureExpr__FailuresAssignment_4 ) )
+                    // InternalFlaDsl.g:786:1: ( rule__OutFailureExpr__FailuresAssignment_4 )
+                    {
+                     before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_4()); 
+                    // InternalFlaDsl.g:787:1: ( rule__OutFailureExpr__FailuresAssignment_4 )
+                    // InternalFlaDsl.g:787:2: rule__OutFailureExpr__FailuresAssignment_4
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__OutFailureExpr__FailuresAssignment_4();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_4()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Alternatives"
+
+
+    // $ANTLR start "rule__ActualFailureType__Alternatives"
+    // InternalFlaDsl.g:798:1: rule__ActualFailureType__Alternatives : ( ( ( 'early' ) ) | ( ( 'late' ) ) | ( ( 'commission' ) ) | ( ( 'omission' ) ) | ( ( 'valueSubtle' ) ) | ( ( 'valueCoarse' ) ) );
+    public final void rule__ActualFailureType__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:802:1: ( ( ( 'early' ) ) | ( ( 'late' ) ) | ( ( 'commission' ) ) | ( ( 'omission' ) ) | ( ( 'valueSubtle' ) ) | ( ( 'valueCoarse' ) ) )
+            int alt6=6;
+            switch ( input.LA(1) ) {
+            case 12:
+                {
+                alt6=1;
+                }
+                break;
+            case 13:
+                {
+                alt6=2;
+                }
+                break;
+            case 14:
+                {
+                alt6=3;
+                }
+                break;
+            case 15:
+                {
+                alt6=4;
+                }
+                break;
+            case 16:
+                {
+                alt6=5;
+                }
+                break;
+            case 17:
+                {
+                alt6=6;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt6) {
+                case 1 :
+                    // InternalFlaDsl.g:803:1: ( ( 'early' ) )
+                    {
+                    // InternalFlaDsl.g:803:1: ( ( 'early' ) )
+                    // InternalFlaDsl.g:804:1: ( 'early' )
+                    {
+                     before(grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:805:1: ( 'early' )
+                    // InternalFlaDsl.g:805:3: 'early'
+                    {
+                    match(input,12,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:810:6: ( ( 'late' ) )
+                    {
+                    // InternalFlaDsl.g:810:6: ( ( 'late' ) )
+                    // InternalFlaDsl.g:811:1: ( 'late' )
+                    {
+                     before(grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:812:1: ( 'late' )
+                    // InternalFlaDsl.g:812:3: 'late'
+                    {
+                    match(input,13,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:817:6: ( ( 'commission' ) )
+                    {
+                    // InternalFlaDsl.g:817:6: ( ( 'commission' ) )
+                    // InternalFlaDsl.g:818:1: ( 'commission' )
+                    {
+                     before(grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:819:1: ( 'commission' )
+                    // InternalFlaDsl.g:819:3: 'commission'
+                    {
+                    match(input,14,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:824:6: ( ( 'omission' ) )
+                    {
+                    // InternalFlaDsl.g:824:6: ( ( 'omission' ) )
+                    // InternalFlaDsl.g:825:1: ( 'omission' )
+                    {
+                     before(grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3()); 
+                    // InternalFlaDsl.g:826:1: ( 'omission' )
+                    // InternalFlaDsl.g:826:3: 'omission'
+                    {
+                    match(input,15,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // InternalFlaDsl.g:831:6: ( ( 'valueSubtle' ) )
+                    {
+                    // InternalFlaDsl.g:831:6: ( ( 'valueSubtle' ) )
+                    // InternalFlaDsl.g:832:1: ( 'valueSubtle' )
+                    {
+                     before(grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4()); 
+                    // InternalFlaDsl.g:833:1: ( 'valueSubtle' )
+                    // InternalFlaDsl.g:833:3: 'valueSubtle'
+                    {
+                    match(input,16,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // InternalFlaDsl.g:838:6: ( ( 'valueCoarse' ) )
+                    {
+                    // InternalFlaDsl.g:838:6: ( ( 'valueCoarse' ) )
+                    // InternalFlaDsl.g:839:1: ( 'valueCoarse' )
+                    {
+                     before(grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5()); 
+                    // InternalFlaDsl.g:840:1: ( 'valueCoarse' )
+                    // InternalFlaDsl.g:840:3: 'valueCoarse'
+                    {
+                    match(input,17,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ActualFailureType__Alternatives"
+
+
+    // $ANTLR start "rule__Aavoidable__Alternatives"
+    // InternalFlaDsl.g:850:1: rule__Aavoidable__Alternatives : ( ( ( 'incompletion' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Aavoidable__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:854:1: ( ( ( 'incompletion' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt7=3;
+            switch ( input.LA(1) ) {
+            case 18:
+                {
+                alt7=1;
+                }
+                break;
+            case 19:
+                {
+                alt7=2;
+                }
+                break;
+            case 20:
+                {
+                alt7=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // InternalFlaDsl.g:855:1: ( ( 'incompletion' ) )
+                    {
+                    // InternalFlaDsl.g:855:1: ( ( 'incompletion' ) )
+                    // InternalFlaDsl.g:856:1: ( 'incompletion' )
+                    {
+                     before(grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:857:1: ( 'incompletion' )
+                    // InternalFlaDsl.g:857:3: 'incompletion'
+                    {
+                    match(input,18,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:862:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:862:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:863:1: ( 'none' )
+                    {
+                     before(grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:864:1: ( 'none' )
+                    // InternalFlaDsl.g:864:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:869:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:869:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:870:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:871:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:871:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Aavoidable__Alternatives"
+
+
+    // $ANTLR start "rule__Cavoidable__Alternatives"
+    // InternalFlaDsl.g:881:1: rule__Cavoidable__Alternatives : ( ( ( 'inconsistency' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Cavoidable__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:885:1: ( ( ( 'inconsistency' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt8=3;
+            switch ( input.LA(1) ) {
+            case 21:
+                {
+                alt8=1;
+                }
+                break;
+            case 19:
+                {
+                alt8=2;
+                }
+                break;
+            case 20:
+                {
+                alt8=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt8) {
+                case 1 :
+                    // InternalFlaDsl.g:886:1: ( ( 'inconsistency' ) )
+                    {
+                    // InternalFlaDsl.g:886:1: ( ( 'inconsistency' ) )
+                    // InternalFlaDsl.g:887:1: ( 'inconsistency' )
+                    {
+                     before(grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:888:1: ( 'inconsistency' )
+                    // InternalFlaDsl.g:888:3: 'inconsistency'
+                    {
+                    match(input,21,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:893:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:893:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:894:1: ( 'none' )
+                    {
+                     before(grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:895:1: ( 'none' )
+                    // InternalFlaDsl.g:895:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:900:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:900:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:901:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:902:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:902:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Cavoidable__Alternatives"
+
+
+    // $ANTLR start "rule__Iavoidable__Alternatives"
+    // InternalFlaDsl.g:912:1: rule__Iavoidable__Alternatives : ( ( ( 'interference' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Iavoidable__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:916:1: ( ( ( 'interference' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt9=3;
+            switch ( input.LA(1) ) {
+            case 22:
+                {
+                alt9=1;
+                }
+                break;
+            case 19:
+                {
+                alt9=2;
+                }
+                break;
+            case 20:
+                {
+                alt9=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // InternalFlaDsl.g:917:1: ( ( 'interference' ) )
+                    {
+                    // InternalFlaDsl.g:917:1: ( ( 'interference' ) )
+                    // InternalFlaDsl.g:918:1: ( 'interference' )
+                    {
+                     before(grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:919:1: ( 'interference' )
+                    // InternalFlaDsl.g:919:3: 'interference'
+                    {
+                    match(input,22,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:924:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:924:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:925:1: ( 'none' )
+                    {
+                     before(grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:926:1: ( 'none' )
+                    // InternalFlaDsl.g:926:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:931:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:931:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:932:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:933:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:933:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Iavoidable__Alternatives"
+
+
+    // $ANTLR start "rule__Davoidable__Alternatives"
+    // InternalFlaDsl.g:943:1: rule__Davoidable__Alternatives : ( ( ( 'impermanence' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Davoidable__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:947:1: ( ( ( 'impermanence' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt10=3;
+            switch ( input.LA(1) ) {
+            case 23:
+                {
+                alt10=1;
+                }
+                break;
+            case 19:
+                {
+                alt10=2;
+                }
+                break;
+            case 20:
+                {
+                alt10=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 10, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt10) {
+                case 1 :
+                    // InternalFlaDsl.g:948:1: ( ( 'impermanence' ) )
+                    {
+                    // InternalFlaDsl.g:948:1: ( ( 'impermanence' ) )
+                    // InternalFlaDsl.g:949:1: ( 'impermanence' )
+                    {
+                     before(grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:950:1: ( 'impermanence' )
+                    // InternalFlaDsl.g:950:3: 'impermanence'
+                    {
+                    match(input,23,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:955:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:955:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:956:1: ( 'none' )
+                    {
+                     before(grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:957:1: ( 'none' )
+                    // InternalFlaDsl.g:957:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:962:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:962:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:963:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:964:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:964:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Davoidable__Alternatives"
+
+
+    // $ANTLR start "rule__Amitigation__Alternatives"
+    // InternalFlaDsl.g:974:1: rule__Amitigation__Alternatives : ( ( ( 'all_or_nothing' ) ) | ( ( 'all_or_compensation' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Amitigation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:978:1: ( ( ( 'all_or_nothing' ) ) | ( ( 'all_or_compensation' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt11=4;
+            switch ( input.LA(1) ) {
+            case 24:
+                {
+                alt11=1;
+                }
+                break;
+            case 25:
+                {
+                alt11=2;
+                }
+                break;
+            case 19:
+                {
+                alt11=3;
+                }
+                break;
+            case 20:
+                {
+                alt11=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 11, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt11) {
+                case 1 :
+                    // InternalFlaDsl.g:979:1: ( ( 'all_or_nothing' ) )
+                    {
+                    // InternalFlaDsl.g:979:1: ( ( 'all_or_nothing' ) )
+                    // InternalFlaDsl.g:980:1: ( 'all_or_nothing' )
+                    {
+                     before(grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:981:1: ( 'all_or_nothing' )
+                    // InternalFlaDsl.g:981:3: 'all_or_nothing'
+                    {
+                    match(input,24,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:986:6: ( ( 'all_or_compensation' ) )
+                    {
+                    // InternalFlaDsl.g:986:6: ( ( 'all_or_compensation' ) )
+                    // InternalFlaDsl.g:987:1: ( 'all_or_compensation' )
+                    {
+                     before(grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:988:1: ( 'all_or_compensation' )
+                    // InternalFlaDsl.g:988:3: 'all_or_compensation'
+                    {
+                    match(input,25,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:993:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:993:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:994:1: ( 'none' )
+                    {
+                     before(grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:995:1: ( 'none' )
+                    // InternalFlaDsl.g:995:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1000:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:1000:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:1001:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                    // InternalFlaDsl.g:1002:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:1002:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Amitigation__Alternatives"
+
+
+    // $ANTLR start "rule__Cmitigation__Alternatives"
+    // InternalFlaDsl.g:1012:1: rule__Cmitigation__Alternatives : ( ( ( 'full_consistency' ) ) | ( ( 'range_violation_allowed' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Cmitigation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1016:1: ( ( ( 'full_consistency' ) ) | ( ( 'range_violation_allowed' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt12=4;
+            switch ( input.LA(1) ) {
+            case 26:
+                {
+                alt12=1;
+                }
+                break;
+            case 27:
+                {
+                alt12=2;
+                }
+                break;
+            case 19:
+                {
+                alt12=3;
+                }
+                break;
+            case 20:
+                {
+                alt12=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt12) {
+                case 1 :
+                    // InternalFlaDsl.g:1017:1: ( ( 'full_consistency' ) )
+                    {
+                    // InternalFlaDsl.g:1017:1: ( ( 'full_consistency' ) )
+                    // InternalFlaDsl.g:1018:1: ( 'full_consistency' )
+                    {
+                     before(grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:1019:1: ( 'full_consistency' )
+                    // InternalFlaDsl.g:1019:3: 'full_consistency'
+                    {
+                    match(input,26,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1024:6: ( ( 'range_violation_allowed' ) )
+                    {
+                    // InternalFlaDsl.g:1024:6: ( ( 'range_violation_allowed' ) )
+                    // InternalFlaDsl.g:1025:1: ( 'range_violation_allowed' )
+                    {
+                     before(grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:1026:1: ( 'range_violation_allowed' )
+                    // InternalFlaDsl.g:1026:3: 'range_violation_allowed'
+                    {
+                    match(input,27,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1031:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:1031:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:1032:1: ( 'none' )
+                    {
+                     before(grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:1033:1: ( 'none' )
+                    // InternalFlaDsl.g:1033:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1038:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:1038:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:1039:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                    // InternalFlaDsl.g:1040:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:1040:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Cmitigation__Alternatives"
+
+
+    // $ANTLR start "rule__Imitigation__Alternatives"
+    // InternalFlaDsl.g:1050:1: rule__Imitigation__Alternatives : ( ( ( 'serializable' ) ) | ( ( 'portable_level' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Imitigation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1054:1: ( ( ( 'serializable' ) ) | ( ( 'portable_level' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt13=4;
+            switch ( input.LA(1) ) {
+            case 28:
+                {
+                alt13=1;
+                }
+                break;
+            case 29:
+                {
+                alt13=2;
+                }
+                break;
+            case 19:
+                {
+                alt13=3;
+                }
+                break;
+            case 20:
+                {
+                alt13=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 13, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt13) {
+                case 1 :
+                    // InternalFlaDsl.g:1055:1: ( ( 'serializable' ) )
+                    {
+                    // InternalFlaDsl.g:1055:1: ( ( 'serializable' ) )
+                    // InternalFlaDsl.g:1056:1: ( 'serializable' )
+                    {
+                     before(grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:1057:1: ( 'serializable' )
+                    // InternalFlaDsl.g:1057:3: 'serializable'
+                    {
+                    match(input,28,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1062:6: ( ( 'portable_level' ) )
+                    {
+                    // InternalFlaDsl.g:1062:6: ( ( 'portable_level' ) )
+                    // InternalFlaDsl.g:1063:1: ( 'portable_level' )
+                    {
+                     before(grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:1064:1: ( 'portable_level' )
+                    // InternalFlaDsl.g:1064:3: 'portable_level'
+                    {
+                    match(input,29,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1069:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:1069:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:1070:1: ( 'none' )
+                    {
+                     before(grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:1071:1: ( 'none' )
+                    // InternalFlaDsl.g:1071:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1076:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:1076:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:1077:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                    // InternalFlaDsl.g:1078:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:1078:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Imitigation__Alternatives"
+
+
+    // $ANTLR start "rule__Dmitigation__Alternatives"
+    // InternalFlaDsl.g:1088:1: rule__Dmitigation__Alternatives : ( ( ( 'no_loss' ) ) | ( ( 'partial_loss_allowed' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) );
+    public final void rule__Dmitigation__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1092:1: ( ( ( 'no_loss' ) ) | ( ( 'partial_loss_allowed' ) ) | ( ( 'none' ) ) | ( ( 'unspecified' ) ) )
+            int alt14=4;
+            switch ( input.LA(1) ) {
+            case 30:
+                {
+                alt14=1;
+                }
+                break;
+            case 31:
+                {
+                alt14=2;
+                }
+                break;
+            case 19:
+                {
+                alt14=3;
+                }
+                break;
+            case 20:
+                {
+                alt14=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 14, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt14) {
+                case 1 :
+                    // InternalFlaDsl.g:1093:1: ( ( 'no_loss' ) )
+                    {
+                    // InternalFlaDsl.g:1093:1: ( ( 'no_loss' ) )
+                    // InternalFlaDsl.g:1094:1: ( 'no_loss' )
+                    {
+                     before(grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0()); 
+                    // InternalFlaDsl.g:1095:1: ( 'no_loss' )
+                    // InternalFlaDsl.g:1095:3: 'no_loss'
+                    {
+                    match(input,30,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1100:6: ( ( 'partial_loss_allowed' ) )
+                    {
+                    // InternalFlaDsl.g:1100:6: ( ( 'partial_loss_allowed' ) )
+                    // InternalFlaDsl.g:1101:1: ( 'partial_loss_allowed' )
+                    {
+                     before(grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1()); 
+                    // InternalFlaDsl.g:1102:1: ( 'partial_loss_allowed' )
+                    // InternalFlaDsl.g:1102:3: 'partial_loss_allowed'
+                    {
+                    match(input,31,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1107:6: ( ( 'none' ) )
+                    {
+                    // InternalFlaDsl.g:1107:6: ( ( 'none' ) )
+                    // InternalFlaDsl.g:1108:1: ( 'none' )
+                    {
+                     before(grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                    // InternalFlaDsl.g:1109:1: ( 'none' )
+                    // InternalFlaDsl.g:1109:3: 'none'
+                    {
+                    match(input,19,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1114:6: ( ( 'unspecified' ) )
+                    {
+                    // InternalFlaDsl.g:1114:6: ( ( 'unspecified' ) )
+                    // InternalFlaDsl.g:1115:1: ( 'unspecified' )
+                    {
+                     before(grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                    // InternalFlaDsl.g:1116:1: ( 'unspecified' )
+                    // InternalFlaDsl.g:1116:3: 'unspecified'
+                    {
+                    match(input,20,FOLLOW_2); 
+
+                    }
+
+                     after(grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Dmitigation__Alternatives"
+
+
+    // $ANTLR start "rule__Expression__Group__0"
+    // InternalFlaDsl.g:1128:1: rule__Expression__Group__0 : rule__Expression__Group__0__Impl rule__Expression__Group__1 ;
+    public final void rule__Expression__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1132:1: ( rule__Expression__Group__0__Impl rule__Expression__Group__1 )
+            // InternalFlaDsl.g:1133:2: rule__Expression__Group__0__Impl rule__Expression__Group__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__Expression__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Expression__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__0"
+
+
+    // $ANTLR start "rule__Expression__Group__0__Impl"
+    // InternalFlaDsl.g:1140:1: rule__Expression__Group__0__Impl : ( 'FLA:' ) ;
+    public final void rule__Expression__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1144:1: ( ( 'FLA:' ) )
+            // InternalFlaDsl.g:1145:1: ( 'FLA:' )
+            {
+            // InternalFlaDsl.g:1145:1: ( 'FLA:' )
+            // InternalFlaDsl.g:1146:1: 'FLA:'
+            {
+             before(grammarAccess.getExpressionAccess().getFLAKeyword_0()); 
+            match(input,32,FOLLOW_2); 
+             after(grammarAccess.getExpressionAccess().getFLAKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Expression__Group__1"
+    // InternalFlaDsl.g:1159:1: rule__Expression__Group__1 : rule__Expression__Group__1__Impl rule__Expression__Group__2 ;
+    public final void rule__Expression__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1163:1: ( rule__Expression__Group__1__Impl rule__Expression__Group__2 )
+            // InternalFlaDsl.g:1164:2: rule__Expression__Group__1__Impl rule__Expression__Group__2
+            {
+            pushFollow(FOLLOW_5);
+            rule__Expression__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Expression__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__1"
+
+
+    // $ANTLR start "rule__Expression__Group__1__Impl"
+    // InternalFlaDsl.g:1171:1: rule__Expression__Group__1__Impl : ( ( rule__Expression__LhsAssignment_1 ) ) ;
+    public final void rule__Expression__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1175:1: ( ( ( rule__Expression__LhsAssignment_1 ) ) )
+            // InternalFlaDsl.g:1176:1: ( ( rule__Expression__LhsAssignment_1 ) )
+            {
+            // InternalFlaDsl.g:1176:1: ( ( rule__Expression__LhsAssignment_1 ) )
+            // InternalFlaDsl.g:1177:1: ( rule__Expression__LhsAssignment_1 )
+            {
+             before(grammarAccess.getExpressionAccess().getLhsAssignment_1()); 
+            // InternalFlaDsl.g:1178:1: ( rule__Expression__LhsAssignment_1 )
+            // InternalFlaDsl.g:1178:2: rule__Expression__LhsAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Expression__LhsAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExpressionAccess().getLhsAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Expression__Group__2"
+    // InternalFlaDsl.g:1188:1: rule__Expression__Group__2 : rule__Expression__Group__2__Impl rule__Expression__Group__3 ;
+    public final void rule__Expression__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1192:1: ( rule__Expression__Group__2__Impl rule__Expression__Group__3 )
+            // InternalFlaDsl.g:1193:2: rule__Expression__Group__2__Impl rule__Expression__Group__3
+            {
+            pushFollow(FOLLOW_4);
+            rule__Expression__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Expression__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__2"
+
+
+    // $ANTLR start "rule__Expression__Group__2__Impl"
+    // InternalFlaDsl.g:1200:1: rule__Expression__Group__2__Impl : ( '->' ) ;
+    public final void rule__Expression__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1204:1: ( ( '->' ) )
+            // InternalFlaDsl.g:1205:1: ( '->' )
+            {
+            // InternalFlaDsl.g:1205:1: ( '->' )
+            // InternalFlaDsl.g:1206:1: '->'
+            {
+             before(grammarAccess.getExpressionAccess().getHyphenMinusGreaterThanSignKeyword_2()); 
+            match(input,33,FOLLOW_2); 
+             after(grammarAccess.getExpressionAccess().getHyphenMinusGreaterThanSignKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Expression__Group__3"
+    // InternalFlaDsl.g:1219:1: rule__Expression__Group__3 : rule__Expression__Group__3__Impl rule__Expression__Group__4 ;
+    public final void rule__Expression__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1223:1: ( rule__Expression__Group__3__Impl rule__Expression__Group__4 )
+            // InternalFlaDsl.g:1224:2: rule__Expression__Group__3__Impl rule__Expression__Group__4
+            {
+            pushFollow(FOLLOW_6);
+            rule__Expression__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Expression__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__3"
+
+
+    // $ANTLR start "rule__Expression__Group__3__Impl"
+    // InternalFlaDsl.g:1231:1: rule__Expression__Group__3__Impl : ( ( rule__Expression__RhsAssignment_3 ) ) ;
+    public final void rule__Expression__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1235:1: ( ( ( rule__Expression__RhsAssignment_3 ) ) )
+            // InternalFlaDsl.g:1236:1: ( ( rule__Expression__RhsAssignment_3 ) )
+            {
+            // InternalFlaDsl.g:1236:1: ( ( rule__Expression__RhsAssignment_3 ) )
+            // InternalFlaDsl.g:1237:1: ( rule__Expression__RhsAssignment_3 )
+            {
+             before(grammarAccess.getExpressionAccess().getRhsAssignment_3()); 
+            // InternalFlaDsl.g:1238:1: ( rule__Expression__RhsAssignment_3 )
+            // InternalFlaDsl.g:1238:2: rule__Expression__RhsAssignment_3
+            {
+            pushFollow(FOLLOW_2);
+            rule__Expression__RhsAssignment_3();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExpressionAccess().getRhsAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Expression__Group__4"
+    // InternalFlaDsl.g:1248:1: rule__Expression__Group__4 : rule__Expression__Group__4__Impl ;
+    public final void rule__Expression__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1252:1: ( rule__Expression__Group__4__Impl )
+            // InternalFlaDsl.g:1253:2: rule__Expression__Group__4__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Expression__Group__4__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__4"
+
+
+    // $ANTLR start "rule__Expression__Group__4__Impl"
+    // InternalFlaDsl.g:1259:1: rule__Expression__Group__4__Impl : ( ';' ) ;
+    public final void rule__Expression__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1263:1: ( ( ';' ) )
+            // InternalFlaDsl.g:1264:1: ( ';' )
+            {
+            // InternalFlaDsl.g:1264:1: ( ';' )
+            // InternalFlaDsl.g:1265:1: ';'
+            {
+             before(grammarAccess.getExpressionAccess().getSemicolonKeyword_4()); 
+            match(input,34,FOLLOW_2); 
+             after(grammarAccess.getExpressionAccess().getSemicolonKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__Group__4__Impl"
+
+
+    // $ANTLR start "rule__Lhs__Group__0"
+    // InternalFlaDsl.g:1288:1: rule__Lhs__Group__0 : rule__Lhs__Group__0__Impl rule__Lhs__Group__1 ;
+    public final void rule__Lhs__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1292:1: ( rule__Lhs__Group__0__Impl rule__Lhs__Group__1 )
+            // InternalFlaDsl.g:1293:2: rule__Lhs__Group__0__Impl rule__Lhs__Group__1
+            {
+            pushFollow(FOLLOW_7);
+            rule__Lhs__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Lhs__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group__0"
+
+
+    // $ANTLR start "rule__Lhs__Group__0__Impl"
+    // InternalFlaDsl.g:1300:1: rule__Lhs__Group__0__Impl : ( ( rule__Lhs__FailuresAssignment_0 ) ) ;
+    public final void rule__Lhs__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1304:1: ( ( ( rule__Lhs__FailuresAssignment_0 ) ) )
+            // InternalFlaDsl.g:1305:1: ( ( rule__Lhs__FailuresAssignment_0 ) )
+            {
+            // InternalFlaDsl.g:1305:1: ( ( rule__Lhs__FailuresAssignment_0 ) )
+            // InternalFlaDsl.g:1306:1: ( rule__Lhs__FailuresAssignment_0 )
+            {
+             before(grammarAccess.getLhsAccess().getFailuresAssignment_0()); 
+            // InternalFlaDsl.g:1307:1: ( rule__Lhs__FailuresAssignment_0 )
+            // InternalFlaDsl.g:1307:2: rule__Lhs__FailuresAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Lhs__FailuresAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getLhsAccess().getFailuresAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Lhs__Group__1"
+    // InternalFlaDsl.g:1317:1: rule__Lhs__Group__1 : rule__Lhs__Group__1__Impl ;
+    public final void rule__Lhs__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1321:1: ( rule__Lhs__Group__1__Impl )
+            // InternalFlaDsl.g:1322:2: rule__Lhs__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Lhs__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group__1"
+
+
+    // $ANTLR start "rule__Lhs__Group__1__Impl"
+    // InternalFlaDsl.g:1328:1: rule__Lhs__Group__1__Impl : ( ( rule__Lhs__Group_1__0 )* ) ;
+    public final void rule__Lhs__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1332:1: ( ( ( rule__Lhs__Group_1__0 )* ) )
+            // InternalFlaDsl.g:1333:1: ( ( rule__Lhs__Group_1__0 )* )
+            {
+            // InternalFlaDsl.g:1333:1: ( ( rule__Lhs__Group_1__0 )* )
+            // InternalFlaDsl.g:1334:1: ( rule__Lhs__Group_1__0 )*
+            {
+             before(grammarAccess.getLhsAccess().getGroup_1()); 
+            // InternalFlaDsl.g:1335:1: ( rule__Lhs__Group_1__0 )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( (LA15_0==35) ) {
+                    alt15=1;
+                }
+
+
+                switch (alt15) {
+            	case 1 :
+            	    // InternalFlaDsl.g:1335:2: rule__Lhs__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_8);
+            	    rule__Lhs__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+             after(grammarAccess.getLhsAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Lhs__Group_1__0"
+    // InternalFlaDsl.g:1349:1: rule__Lhs__Group_1__0 : rule__Lhs__Group_1__0__Impl rule__Lhs__Group_1__1 ;
+    public final void rule__Lhs__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1353:1: ( rule__Lhs__Group_1__0__Impl rule__Lhs__Group_1__1 )
+            // InternalFlaDsl.g:1354:2: rule__Lhs__Group_1__0__Impl rule__Lhs__Group_1__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__Lhs__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Lhs__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group_1__0"
+
+
+    // $ANTLR start "rule__Lhs__Group_1__0__Impl"
+    // InternalFlaDsl.g:1361:1: rule__Lhs__Group_1__0__Impl : ( ',' ) ;
+    public final void rule__Lhs__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1365:1: ( ( ',' ) )
+            // InternalFlaDsl.g:1366:1: ( ',' )
+            {
+            // InternalFlaDsl.g:1366:1: ( ',' )
+            // InternalFlaDsl.g:1367:1: ','
+            {
+             before(grammarAccess.getLhsAccess().getCommaKeyword_1_0()); 
+            match(input,35,FOLLOW_2); 
+             after(grammarAccess.getLhsAccess().getCommaKeyword_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Lhs__Group_1__1"
+    // InternalFlaDsl.g:1380:1: rule__Lhs__Group_1__1 : rule__Lhs__Group_1__1__Impl ;
+    public final void rule__Lhs__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1384:1: ( rule__Lhs__Group_1__1__Impl )
+            // InternalFlaDsl.g:1385:2: rule__Lhs__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Lhs__Group_1__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group_1__1"
+
+
+    // $ANTLR start "rule__Lhs__Group_1__1__Impl"
+    // InternalFlaDsl.g:1391:1: rule__Lhs__Group_1__1__Impl : ( ( rule__Lhs__FailuresAssignment_1_1 ) ) ;
+    public final void rule__Lhs__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1395:1: ( ( ( rule__Lhs__FailuresAssignment_1_1 ) ) )
+            // InternalFlaDsl.g:1396:1: ( ( rule__Lhs__FailuresAssignment_1_1 ) )
+            {
+            // InternalFlaDsl.g:1396:1: ( ( rule__Lhs__FailuresAssignment_1_1 ) )
+            // InternalFlaDsl.g:1397:1: ( rule__Lhs__FailuresAssignment_1_1 )
+            {
+             before(grammarAccess.getLhsAccess().getFailuresAssignment_1_1()); 
+            // InternalFlaDsl.g:1398:1: ( rule__Lhs__FailuresAssignment_1_1 )
+            // InternalFlaDsl.g:1398:2: rule__Lhs__FailuresAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Lhs__FailuresAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getLhsAccess().getFailuresAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__Rhs__Group__0"
+    // InternalFlaDsl.g:1412:1: rule__Rhs__Group__0 : rule__Rhs__Group__0__Impl rule__Rhs__Group__1 ;
+    public final void rule__Rhs__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1416:1: ( rule__Rhs__Group__0__Impl rule__Rhs__Group__1 )
+            // InternalFlaDsl.g:1417:2: rule__Rhs__Group__0__Impl rule__Rhs__Group__1
+            {
+            pushFollow(FOLLOW_7);
+            rule__Rhs__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Rhs__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group__0"
+
+
+    // $ANTLR start "rule__Rhs__Group__0__Impl"
+    // InternalFlaDsl.g:1424:1: rule__Rhs__Group__0__Impl : ( ( rule__Rhs__FailuresAssignment_0 ) ) ;
+    public final void rule__Rhs__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1428:1: ( ( ( rule__Rhs__FailuresAssignment_0 ) ) )
+            // InternalFlaDsl.g:1429:1: ( ( rule__Rhs__FailuresAssignment_0 ) )
+            {
+            // InternalFlaDsl.g:1429:1: ( ( rule__Rhs__FailuresAssignment_0 ) )
+            // InternalFlaDsl.g:1430:1: ( rule__Rhs__FailuresAssignment_0 )
+            {
+             before(grammarAccess.getRhsAccess().getFailuresAssignment_0()); 
+            // InternalFlaDsl.g:1431:1: ( rule__Rhs__FailuresAssignment_0 )
+            // InternalFlaDsl.g:1431:2: rule__Rhs__FailuresAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__Rhs__FailuresAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRhsAccess().getFailuresAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Rhs__Group__1"
+    // InternalFlaDsl.g:1441:1: rule__Rhs__Group__1 : rule__Rhs__Group__1__Impl ;
+    public final void rule__Rhs__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1445:1: ( rule__Rhs__Group__1__Impl )
+            // InternalFlaDsl.g:1446:2: rule__Rhs__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Rhs__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group__1"
+
+
+    // $ANTLR start "rule__Rhs__Group__1__Impl"
+    // InternalFlaDsl.g:1452:1: rule__Rhs__Group__1__Impl : ( ( rule__Rhs__Group_1__0 )* ) ;
+    public final void rule__Rhs__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1456:1: ( ( ( rule__Rhs__Group_1__0 )* ) )
+            // InternalFlaDsl.g:1457:1: ( ( rule__Rhs__Group_1__0 )* )
+            {
+            // InternalFlaDsl.g:1457:1: ( ( rule__Rhs__Group_1__0 )* )
+            // InternalFlaDsl.g:1458:1: ( rule__Rhs__Group_1__0 )*
+            {
+             before(grammarAccess.getRhsAccess().getGroup_1()); 
+            // InternalFlaDsl.g:1459:1: ( rule__Rhs__Group_1__0 )*
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( (LA16_0==35) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // InternalFlaDsl.g:1459:2: rule__Rhs__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_8);
+            	    rule__Rhs__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop16;
+                }
+            } while (true);
+
+             after(grammarAccess.getRhsAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Rhs__Group_1__0"
+    // InternalFlaDsl.g:1473:1: rule__Rhs__Group_1__0 : rule__Rhs__Group_1__0__Impl rule__Rhs__Group_1__1 ;
+    public final void rule__Rhs__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1477:1: ( rule__Rhs__Group_1__0__Impl rule__Rhs__Group_1__1 )
+            // InternalFlaDsl.g:1478:2: rule__Rhs__Group_1__0__Impl rule__Rhs__Group_1__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__Rhs__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__Rhs__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group_1__0"
+
+
+    // $ANTLR start "rule__Rhs__Group_1__0__Impl"
+    // InternalFlaDsl.g:1485:1: rule__Rhs__Group_1__0__Impl : ( ',' ) ;
+    public final void rule__Rhs__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1489:1: ( ( ',' ) )
+            // InternalFlaDsl.g:1490:1: ( ',' )
+            {
+            // InternalFlaDsl.g:1490:1: ( ',' )
+            // InternalFlaDsl.g:1491:1: ','
+            {
+             before(grammarAccess.getRhsAccess().getCommaKeyword_1_0()); 
+            match(input,35,FOLLOW_2); 
+             after(grammarAccess.getRhsAccess().getCommaKeyword_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__Rhs__Group_1__1"
+    // InternalFlaDsl.g:1504:1: rule__Rhs__Group_1__1 : rule__Rhs__Group_1__1__Impl ;
+    public final void rule__Rhs__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1508:1: ( rule__Rhs__Group_1__1__Impl )
+            // InternalFlaDsl.g:1509:2: rule__Rhs__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__Rhs__Group_1__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group_1__1"
+
+
+    // $ANTLR start "rule__Rhs__Group_1__1__Impl"
+    // InternalFlaDsl.g:1515:1: rule__Rhs__Group_1__1__Impl : ( ( rule__Rhs__FailuresAssignment_1_1 ) ) ;
+    public final void rule__Rhs__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1519:1: ( ( ( rule__Rhs__FailuresAssignment_1_1 ) ) )
+            // InternalFlaDsl.g:1520:1: ( ( rule__Rhs__FailuresAssignment_1_1 ) )
+            {
+            // InternalFlaDsl.g:1520:1: ( ( rule__Rhs__FailuresAssignment_1_1 ) )
+            // InternalFlaDsl.g:1521:1: ( rule__Rhs__FailuresAssignment_1_1 )
+            {
+             before(grammarAccess.getRhsAccess().getFailuresAssignment_1_1()); 
+            // InternalFlaDsl.g:1522:1: ( rule__Rhs__FailuresAssignment_1_1 )
+            // InternalFlaDsl.g:1522:2: rule__Rhs__FailuresAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__Rhs__FailuresAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRhsAccess().getFailuresAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__InputExpression__Group__0"
+    // InternalFlaDsl.g:1536:1: rule__InputExpression__Group__0 : rule__InputExpression__Group__0__Impl rule__InputExpression__Group__1 ;
+    public final void rule__InputExpression__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1540:1: ( rule__InputExpression__Group__0__Impl rule__InputExpression__Group__1 )
+            // InternalFlaDsl.g:1541:2: rule__InputExpression__Group__0__Impl rule__InputExpression__Group__1
+            {
+            pushFollow(FOLLOW_9);
+            rule__InputExpression__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InputExpression__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Group__0"
+
+
+    // $ANTLR start "rule__InputExpression__Group__0__Impl"
+    // InternalFlaDsl.g:1548:1: rule__InputExpression__Group__0__Impl : ( ( rule__InputExpression__Alternatives_0 ) ) ;
+    public final void rule__InputExpression__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1552:1: ( ( ( rule__InputExpression__Alternatives_0 ) ) )
+            // InternalFlaDsl.g:1553:1: ( ( rule__InputExpression__Alternatives_0 ) )
+            {
+            // InternalFlaDsl.g:1553:1: ( ( rule__InputExpression__Alternatives_0 ) )
+            // InternalFlaDsl.g:1554:1: ( rule__InputExpression__Alternatives_0 )
+            {
+             before(grammarAccess.getInputExpressionAccess().getAlternatives_0()); 
+            // InternalFlaDsl.g:1555:1: ( rule__InputExpression__Alternatives_0 )
+            // InternalFlaDsl.g:1555:2: rule__InputExpression__Alternatives_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__InputExpression__Alternatives_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInputExpressionAccess().getAlternatives_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Group__0__Impl"
+
+
+    // $ANTLR start "rule__InputExpression__Group__1"
+    // InternalFlaDsl.g:1565:1: rule__InputExpression__Group__1 : rule__InputExpression__Group__1__Impl rule__InputExpression__Group__2 ;
+    public final void rule__InputExpression__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1569:1: ( rule__InputExpression__Group__1__Impl rule__InputExpression__Group__2 )
+            // InternalFlaDsl.g:1570:2: rule__InputExpression__Group__1__Impl rule__InputExpression__Group__2
+            {
+            pushFollow(FOLLOW_10);
+            rule__InputExpression__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InputExpression__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Group__1"
+
+
+    // $ANTLR start "rule__InputExpression__Group__1__Impl"
+    // InternalFlaDsl.g:1577:1: rule__InputExpression__Group__1__Impl : ( '.' ) ;
+    public final void rule__InputExpression__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1581:1: ( ( '.' ) )
+            // InternalFlaDsl.g:1582:1: ( '.' )
+            {
+            // InternalFlaDsl.g:1582:1: ( '.' )
+            // InternalFlaDsl.g:1583:1: '.'
+            {
+             before(grammarAccess.getInputExpressionAccess().getFullStopKeyword_1()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getInputExpressionAccess().getFullStopKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Group__1__Impl"
+
+
+    // $ANTLR start "rule__InputExpression__Group__2"
+    // InternalFlaDsl.g:1596:1: rule__InputExpression__Group__2 : rule__InputExpression__Group__2__Impl ;
+    public final void rule__InputExpression__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1600:1: ( rule__InputExpression__Group__2__Impl )
+            // InternalFlaDsl.g:1601:2: rule__InputExpression__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__InputExpression__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Group__2"
+
+
+    // $ANTLR start "rule__InputExpression__Group__2__Impl"
+    // InternalFlaDsl.g:1607:1: rule__InputExpression__Group__2__Impl : ( ( rule__InputExpression__FailureExprAssignment_2 ) ) ;
+    public final void rule__InputExpression__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1611:1: ( ( ( rule__InputExpression__FailureExprAssignment_2 ) ) )
+            // InternalFlaDsl.g:1612:1: ( ( rule__InputExpression__FailureExprAssignment_2 ) )
+            {
+            // InternalFlaDsl.g:1612:1: ( ( rule__InputExpression__FailureExprAssignment_2 ) )
+            // InternalFlaDsl.g:1613:1: ( rule__InputExpression__FailureExprAssignment_2 )
+            {
+             before(grammarAccess.getInputExpressionAccess().getFailureExprAssignment_2()); 
+            // InternalFlaDsl.g:1614:1: ( rule__InputExpression__FailureExprAssignment_2 )
+            // InternalFlaDsl.g:1614:2: rule__InputExpression__FailureExprAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__InputExpression__FailureExprAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInputExpressionAccess().getFailureExprAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__Group__2__Impl"
+
+
+    // $ANTLR start "rule__OutputExpression__Group__0"
+    // InternalFlaDsl.g:1630:1: rule__OutputExpression__Group__0 : rule__OutputExpression__Group__0__Impl rule__OutputExpression__Group__1 ;
+    public final void rule__OutputExpression__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1634:1: ( rule__OutputExpression__Group__0__Impl rule__OutputExpression__Group__1 )
+            // InternalFlaDsl.g:1635:2: rule__OutputExpression__Group__0__Impl rule__OutputExpression__Group__1
+            {
+            pushFollow(FOLLOW_9);
+            rule__OutputExpression__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__OutputExpression__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Group__0"
+
+
+    // $ANTLR start "rule__OutputExpression__Group__0__Impl"
+    // InternalFlaDsl.g:1642:1: rule__OutputExpression__Group__0__Impl : ( ( rule__OutputExpression__Alternatives_0 ) ) ;
+    public final void rule__OutputExpression__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1646:1: ( ( ( rule__OutputExpression__Alternatives_0 ) ) )
+            // InternalFlaDsl.g:1647:1: ( ( rule__OutputExpression__Alternatives_0 ) )
+            {
+            // InternalFlaDsl.g:1647:1: ( ( rule__OutputExpression__Alternatives_0 ) )
+            // InternalFlaDsl.g:1648:1: ( rule__OutputExpression__Alternatives_0 )
+            {
+             before(grammarAccess.getOutputExpressionAccess().getAlternatives_0()); 
+            // InternalFlaDsl.g:1649:1: ( rule__OutputExpression__Alternatives_0 )
+            // InternalFlaDsl.g:1649:2: rule__OutputExpression__Alternatives_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutputExpression__Alternatives_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutputExpressionAccess().getAlternatives_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Group__0__Impl"
+
+
+    // $ANTLR start "rule__OutputExpression__Group__1"
+    // InternalFlaDsl.g:1659:1: rule__OutputExpression__Group__1 : rule__OutputExpression__Group__1__Impl rule__OutputExpression__Group__2 ;
+    public final void rule__OutputExpression__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1663:1: ( rule__OutputExpression__Group__1__Impl rule__OutputExpression__Group__2 )
+            // InternalFlaDsl.g:1664:2: rule__OutputExpression__Group__1__Impl rule__OutputExpression__Group__2
+            {
+            pushFollow(FOLLOW_10);
+            rule__OutputExpression__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__OutputExpression__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Group__1"
+
+
+    // $ANTLR start "rule__OutputExpression__Group__1__Impl"
+    // InternalFlaDsl.g:1671:1: rule__OutputExpression__Group__1__Impl : ( '.' ) ;
+    public final void rule__OutputExpression__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1675:1: ( ( '.' ) )
+            // InternalFlaDsl.g:1676:1: ( '.' )
+            {
+            // InternalFlaDsl.g:1676:1: ( '.' )
+            // InternalFlaDsl.g:1677:1: '.'
+            {
+             before(grammarAccess.getOutputExpressionAccess().getFullStopKeyword_1()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getOutputExpressionAccess().getFullStopKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Group__1__Impl"
+
+
+    // $ANTLR start "rule__OutputExpression__Group__2"
+    // InternalFlaDsl.g:1690:1: rule__OutputExpression__Group__2 : rule__OutputExpression__Group__2__Impl ;
+    public final void rule__OutputExpression__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1694:1: ( rule__OutputExpression__Group__2__Impl )
+            // InternalFlaDsl.g:1695:2: rule__OutputExpression__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutputExpression__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Group__2"
+
+
+    // $ANTLR start "rule__OutputExpression__Group__2__Impl"
+    // InternalFlaDsl.g:1701:1: rule__OutputExpression__Group__2__Impl : ( ( rule__OutputExpression__FailureExprAssignment_2 ) ) ;
+    public final void rule__OutputExpression__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1705:1: ( ( ( rule__OutputExpression__FailureExprAssignment_2 ) ) )
+            // InternalFlaDsl.g:1706:1: ( ( rule__OutputExpression__FailureExprAssignment_2 ) )
+            {
+            // InternalFlaDsl.g:1706:1: ( ( rule__OutputExpression__FailureExprAssignment_2 ) )
+            // InternalFlaDsl.g:1707:1: ( rule__OutputExpression__FailureExprAssignment_2 )
+            {
+             before(grammarAccess.getOutputExpressionAccess().getFailureExprAssignment_2()); 
+            // InternalFlaDsl.g:1708:1: ( rule__OutputExpression__FailureExprAssignment_2 )
+            // InternalFlaDsl.g:1708:2: rule__OutputExpression__FailureExprAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutputExpression__FailureExprAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutputExpressionAccess().getFailureExprAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__Group__2__Impl"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__0"
+    // InternalFlaDsl.g:1724:1: rule__InFailureExpr__Group_3__0 : rule__InFailureExpr__Group_3__0__Impl rule__InFailureExpr__Group_3__1 ;
+    public final void rule__InFailureExpr__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1728:1: ( rule__InFailureExpr__Group_3__0__Impl rule__InFailureExpr__Group_3__1 )
+            // InternalFlaDsl.g:1729:2: rule__InFailureExpr__Group_3__0__Impl rule__InFailureExpr__Group_3__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__InFailureExpr__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__0"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__0__Impl"
+    // InternalFlaDsl.g:1736:1: rule__InFailureExpr__Group_3__0__Impl : ( '{' ) ;
+    public final void rule__InFailureExpr__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1740:1: ( ( '{' ) )
+            // InternalFlaDsl.g:1741:1: ( '{' )
+            {
+            // InternalFlaDsl.g:1741:1: ( '{' )
+            // InternalFlaDsl.g:1742:1: '{'
+            {
+             before(grammarAccess.getInFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); 
+            match(input,37,FOLLOW_2); 
+             after(grammarAccess.getInFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__1"
+    // InternalFlaDsl.g:1755:1: rule__InFailureExpr__Group_3__1 : rule__InFailureExpr__Group_3__1__Impl rule__InFailureExpr__Group_3__2 ;
+    public final void rule__InFailureExpr__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1759:1: ( rule__InFailureExpr__Group_3__1__Impl rule__InFailureExpr__Group_3__2 )
+            // InternalFlaDsl.g:1760:2: rule__InFailureExpr__Group_3__1__Impl rule__InFailureExpr__Group_3__2
+            {
+            pushFollow(FOLLOW_7);
+            rule__InFailureExpr__Group_3__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Group_3__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__1"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__1__Impl"
+    // InternalFlaDsl.g:1767:1: rule__InFailureExpr__Group_3__1__Impl : ( ( rule__InFailureExpr__FailuresAssignment_3_1 ) ) ;
+    public final void rule__InFailureExpr__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1771:1: ( ( ( rule__InFailureExpr__FailuresAssignment_3_1 ) ) )
+            // InternalFlaDsl.g:1772:1: ( ( rule__InFailureExpr__FailuresAssignment_3_1 ) )
+            {
+            // InternalFlaDsl.g:1772:1: ( ( rule__InFailureExpr__FailuresAssignment_3_1 ) )
+            // InternalFlaDsl.g:1773:1: ( rule__InFailureExpr__FailuresAssignment_3_1 )
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_1()); 
+            // InternalFlaDsl.g:1774:1: ( rule__InFailureExpr__FailuresAssignment_3_1 )
+            // InternalFlaDsl.g:1774:2: rule__InFailureExpr__FailuresAssignment_3_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__FailuresAssignment_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__2"
+    // InternalFlaDsl.g:1784:1: rule__InFailureExpr__Group_3__2 : rule__InFailureExpr__Group_3__2__Impl rule__InFailureExpr__Group_3__3 ;
+    public final void rule__InFailureExpr__Group_3__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1788:1: ( rule__InFailureExpr__Group_3__2__Impl rule__InFailureExpr__Group_3__3 )
+            // InternalFlaDsl.g:1789:2: rule__InFailureExpr__Group_3__2__Impl rule__InFailureExpr__Group_3__3
+            {
+            pushFollow(FOLLOW_12);
+            rule__InFailureExpr__Group_3__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Group_3__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__2"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__2__Impl"
+    // InternalFlaDsl.g:1796:1: rule__InFailureExpr__Group_3__2__Impl : ( ( ( rule__InFailureExpr__Group_3_2__0 ) ) ( ( rule__InFailureExpr__Group_3_2__0 )* ) ) ;
+    public final void rule__InFailureExpr__Group_3__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1800:1: ( ( ( ( rule__InFailureExpr__Group_3_2__0 ) ) ( ( rule__InFailureExpr__Group_3_2__0 )* ) ) )
+            // InternalFlaDsl.g:1801:1: ( ( ( rule__InFailureExpr__Group_3_2__0 ) ) ( ( rule__InFailureExpr__Group_3_2__0 )* ) )
+            {
+            // InternalFlaDsl.g:1801:1: ( ( ( rule__InFailureExpr__Group_3_2__0 ) ) ( ( rule__InFailureExpr__Group_3_2__0 )* ) )
+            // InternalFlaDsl.g:1802:1: ( ( rule__InFailureExpr__Group_3_2__0 ) ) ( ( rule__InFailureExpr__Group_3_2__0 )* )
+            {
+            // InternalFlaDsl.g:1802:1: ( ( rule__InFailureExpr__Group_3_2__0 ) )
+            // InternalFlaDsl.g:1803:1: ( rule__InFailureExpr__Group_3_2__0 )
+            {
+             before(grammarAccess.getInFailureExprAccess().getGroup_3_2()); 
+            // InternalFlaDsl.g:1804:1: ( rule__InFailureExpr__Group_3_2__0 )
+            // InternalFlaDsl.g:1804:2: rule__InFailureExpr__Group_3_2__0
+            {
+            pushFollow(FOLLOW_8);
+            rule__InFailureExpr__Group_3_2__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInFailureExprAccess().getGroup_3_2()); 
+
+            }
+
+            // InternalFlaDsl.g:1807:1: ( ( rule__InFailureExpr__Group_3_2__0 )* )
+            // InternalFlaDsl.g:1808:1: ( rule__InFailureExpr__Group_3_2__0 )*
+            {
+             before(grammarAccess.getInFailureExprAccess().getGroup_3_2()); 
+            // InternalFlaDsl.g:1809:1: ( rule__InFailureExpr__Group_3_2__0 )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( (LA17_0==35) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // InternalFlaDsl.g:1809:2: rule__InFailureExpr__Group_3_2__0
+            	    {
+            	    pushFollow(FOLLOW_8);
+            	    rule__InFailureExpr__Group_3_2__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+             after(grammarAccess.getInFailureExprAccess().getGroup_3_2()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__2__Impl"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__3"
+    // InternalFlaDsl.g:1820:1: rule__InFailureExpr__Group_3__3 : rule__InFailureExpr__Group_3__3__Impl ;
+    public final void rule__InFailureExpr__Group_3__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1824:1: ( rule__InFailureExpr__Group_3__3__Impl )
+            // InternalFlaDsl.g:1825:2: rule__InFailureExpr__Group_3__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Group_3__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__3"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3__3__Impl"
+    // InternalFlaDsl.g:1831:1: rule__InFailureExpr__Group_3__3__Impl : ( '}' ) ;
+    public final void rule__InFailureExpr__Group_3__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1835:1: ( ( '}' ) )
+            // InternalFlaDsl.g:1836:1: ( '}' )
+            {
+            // InternalFlaDsl.g:1836:1: ( '}' )
+            // InternalFlaDsl.g:1837:1: '}'
+            {
+             before(grammarAccess.getInFailureExprAccess().getRightCurlyBracketKeyword_3_3()); 
+            match(input,38,FOLLOW_2); 
+             after(grammarAccess.getInFailureExprAccess().getRightCurlyBracketKeyword_3_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3__3__Impl"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3_2__0"
+    // InternalFlaDsl.g:1858:1: rule__InFailureExpr__Group_3_2__0 : rule__InFailureExpr__Group_3_2__0__Impl rule__InFailureExpr__Group_3_2__1 ;
+    public final void rule__InFailureExpr__Group_3_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1862:1: ( rule__InFailureExpr__Group_3_2__0__Impl rule__InFailureExpr__Group_3_2__1 )
+            // InternalFlaDsl.g:1863:2: rule__InFailureExpr__Group_3_2__0__Impl rule__InFailureExpr__Group_3_2__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__InFailureExpr__Group_3_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Group_3_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3_2__0"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3_2__0__Impl"
+    // InternalFlaDsl.g:1870:1: rule__InFailureExpr__Group_3_2__0__Impl : ( ',' ) ;
+    public final void rule__InFailureExpr__Group_3_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1874:1: ( ( ',' ) )
+            // InternalFlaDsl.g:1875:1: ( ',' )
+            {
+            // InternalFlaDsl.g:1875:1: ( ',' )
+            // InternalFlaDsl.g:1876:1: ','
+            {
+             before(grammarAccess.getInFailureExprAccess().getCommaKeyword_3_2_0()); 
+            match(input,35,FOLLOW_2); 
+             after(grammarAccess.getInFailureExprAccess().getCommaKeyword_3_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3_2__0__Impl"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3_2__1"
+    // InternalFlaDsl.g:1889:1: rule__InFailureExpr__Group_3_2__1 : rule__InFailureExpr__Group_3_2__1__Impl ;
+    public final void rule__InFailureExpr__Group_3_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1893:1: ( rule__InFailureExpr__Group_3_2__1__Impl )
+            // InternalFlaDsl.g:1894:2: rule__InFailureExpr__Group_3_2__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__Group_3_2__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3_2__1"
+
+
+    // $ANTLR start "rule__InFailureExpr__Group_3_2__1__Impl"
+    // InternalFlaDsl.g:1900:1: rule__InFailureExpr__Group_3_2__1__Impl : ( ( rule__InFailureExpr__FailuresAssignment_3_2_1 ) ) ;
+    public final void rule__InFailureExpr__Group_3_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1904:1: ( ( ( rule__InFailureExpr__FailuresAssignment_3_2_1 ) ) )
+            // InternalFlaDsl.g:1905:1: ( ( rule__InFailureExpr__FailuresAssignment_3_2_1 ) )
+            {
+            // InternalFlaDsl.g:1905:1: ( ( rule__InFailureExpr__FailuresAssignment_3_2_1 ) )
+            // InternalFlaDsl.g:1906:1: ( rule__InFailureExpr__FailuresAssignment_3_2_1 )
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_2_1()); 
+            // InternalFlaDsl.g:1907:1: ( rule__InFailureExpr__FailuresAssignment_3_2_1 )
+            // InternalFlaDsl.g:1907:2: rule__InFailureExpr__FailuresAssignment_3_2_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__InFailureExpr__FailuresAssignment_3_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresAssignment_3_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__Group_3_2__1__Impl"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__0"
+    // InternalFlaDsl.g:1921:1: rule__OutFailureExpr__Group_3__0 : rule__OutFailureExpr__Group_3__0__Impl rule__OutFailureExpr__Group_3__1 ;
+    public final void rule__OutFailureExpr__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1925:1: ( rule__OutFailureExpr__Group_3__0__Impl rule__OutFailureExpr__Group_3__1 )
+            // InternalFlaDsl.g:1926:2: rule__OutFailureExpr__Group_3__0__Impl rule__OutFailureExpr__Group_3__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__OutFailureExpr__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__0"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__0__Impl"
+    // InternalFlaDsl.g:1933:1: rule__OutFailureExpr__Group_3__0__Impl : ( '{' ) ;
+    public final void rule__OutFailureExpr__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1937:1: ( ( '{' ) )
+            // InternalFlaDsl.g:1938:1: ( '{' )
+            {
+            // InternalFlaDsl.g:1938:1: ( '{' )
+            // InternalFlaDsl.g:1939:1: '{'
+            {
+             before(grammarAccess.getOutFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); 
+            match(input,37,FOLLOW_2); 
+             after(grammarAccess.getOutFailureExprAccess().getLeftCurlyBracketKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__1"
+    // InternalFlaDsl.g:1952:1: rule__OutFailureExpr__Group_3__1 : rule__OutFailureExpr__Group_3__1__Impl rule__OutFailureExpr__Group_3__2 ;
+    public final void rule__OutFailureExpr__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1956:1: ( rule__OutFailureExpr__Group_3__1__Impl rule__OutFailureExpr__Group_3__2 )
+            // InternalFlaDsl.g:1957:2: rule__OutFailureExpr__Group_3__1__Impl rule__OutFailureExpr__Group_3__2
+            {
+            pushFollow(FOLLOW_7);
+            rule__OutFailureExpr__Group_3__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Group_3__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__1"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__1__Impl"
+    // InternalFlaDsl.g:1964:1: rule__OutFailureExpr__Group_3__1__Impl : ( ( rule__OutFailureExpr__FailuresAssignment_3_1 ) ) ;
+    public final void rule__OutFailureExpr__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1968:1: ( ( ( rule__OutFailureExpr__FailuresAssignment_3_1 ) ) )
+            // InternalFlaDsl.g:1969:1: ( ( rule__OutFailureExpr__FailuresAssignment_3_1 ) )
+            {
+            // InternalFlaDsl.g:1969:1: ( ( rule__OutFailureExpr__FailuresAssignment_3_1 ) )
+            // InternalFlaDsl.g:1970:1: ( rule__OutFailureExpr__FailuresAssignment_3_1 )
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_1()); 
+            // InternalFlaDsl.g:1971:1: ( rule__OutFailureExpr__FailuresAssignment_3_1 )
+            // InternalFlaDsl.g:1971:2: rule__OutFailureExpr__FailuresAssignment_3_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__FailuresAssignment_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__2"
+    // InternalFlaDsl.g:1981:1: rule__OutFailureExpr__Group_3__2 : rule__OutFailureExpr__Group_3__2__Impl rule__OutFailureExpr__Group_3__3 ;
+    public final void rule__OutFailureExpr__Group_3__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1985:1: ( rule__OutFailureExpr__Group_3__2__Impl rule__OutFailureExpr__Group_3__3 )
+            // InternalFlaDsl.g:1986:2: rule__OutFailureExpr__Group_3__2__Impl rule__OutFailureExpr__Group_3__3
+            {
+            pushFollow(FOLLOW_12);
+            rule__OutFailureExpr__Group_3__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Group_3__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__2"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__2__Impl"
+    // InternalFlaDsl.g:1993:1: rule__OutFailureExpr__Group_3__2__Impl : ( ( ( rule__OutFailureExpr__Group_3_2__0 ) ) ( ( rule__OutFailureExpr__Group_3_2__0 )* ) ) ;
+    public final void rule__OutFailureExpr__Group_3__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:1997:1: ( ( ( ( rule__OutFailureExpr__Group_3_2__0 ) ) ( ( rule__OutFailureExpr__Group_3_2__0 )* ) ) )
+            // InternalFlaDsl.g:1998:1: ( ( ( rule__OutFailureExpr__Group_3_2__0 ) ) ( ( rule__OutFailureExpr__Group_3_2__0 )* ) )
+            {
+            // InternalFlaDsl.g:1998:1: ( ( ( rule__OutFailureExpr__Group_3_2__0 ) ) ( ( rule__OutFailureExpr__Group_3_2__0 )* ) )
+            // InternalFlaDsl.g:1999:1: ( ( rule__OutFailureExpr__Group_3_2__0 ) ) ( ( rule__OutFailureExpr__Group_3_2__0 )* )
+            {
+            // InternalFlaDsl.g:1999:1: ( ( rule__OutFailureExpr__Group_3_2__0 ) )
+            // InternalFlaDsl.g:2000:1: ( rule__OutFailureExpr__Group_3_2__0 )
+            {
+             before(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); 
+            // InternalFlaDsl.g:2001:1: ( rule__OutFailureExpr__Group_3_2__0 )
+            // InternalFlaDsl.g:2001:2: rule__OutFailureExpr__Group_3_2__0
+            {
+            pushFollow(FOLLOW_8);
+            rule__OutFailureExpr__Group_3_2__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); 
+
+            }
+
+            // InternalFlaDsl.g:2004:1: ( ( rule__OutFailureExpr__Group_3_2__0 )* )
+            // InternalFlaDsl.g:2005:1: ( rule__OutFailureExpr__Group_3_2__0 )*
+            {
+             before(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); 
+            // InternalFlaDsl.g:2006:1: ( rule__OutFailureExpr__Group_3_2__0 )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0==35) ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // InternalFlaDsl.g:2006:2: rule__OutFailureExpr__Group_3_2__0
+            	    {
+            	    pushFollow(FOLLOW_8);
+            	    rule__OutFailureExpr__Group_3_2__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+             after(grammarAccess.getOutFailureExprAccess().getGroup_3_2()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__2__Impl"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__3"
+    // InternalFlaDsl.g:2017:1: rule__OutFailureExpr__Group_3__3 : rule__OutFailureExpr__Group_3__3__Impl ;
+    public final void rule__OutFailureExpr__Group_3__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2021:1: ( rule__OutFailureExpr__Group_3__3__Impl )
+            // InternalFlaDsl.g:2022:2: rule__OutFailureExpr__Group_3__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Group_3__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__3"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3__3__Impl"
+    // InternalFlaDsl.g:2028:1: rule__OutFailureExpr__Group_3__3__Impl : ( '}' ) ;
+    public final void rule__OutFailureExpr__Group_3__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2032:1: ( ( '}' ) )
+            // InternalFlaDsl.g:2033:1: ( '}' )
+            {
+            // InternalFlaDsl.g:2033:1: ( '}' )
+            // InternalFlaDsl.g:2034:1: '}'
+            {
+             before(grammarAccess.getOutFailureExprAccess().getRightCurlyBracketKeyword_3_3()); 
+            match(input,38,FOLLOW_2); 
+             after(grammarAccess.getOutFailureExprAccess().getRightCurlyBracketKeyword_3_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3__3__Impl"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3_2__0"
+    // InternalFlaDsl.g:2055:1: rule__OutFailureExpr__Group_3_2__0 : rule__OutFailureExpr__Group_3_2__0__Impl rule__OutFailureExpr__Group_3_2__1 ;
+    public final void rule__OutFailureExpr__Group_3_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2059:1: ( rule__OutFailureExpr__Group_3_2__0__Impl rule__OutFailureExpr__Group_3_2__1 )
+            // InternalFlaDsl.g:2060:2: rule__OutFailureExpr__Group_3_2__0__Impl rule__OutFailureExpr__Group_3_2__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__OutFailureExpr__Group_3_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Group_3_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3_2__0"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3_2__0__Impl"
+    // InternalFlaDsl.g:2067:1: rule__OutFailureExpr__Group_3_2__0__Impl : ( ',' ) ;
+    public final void rule__OutFailureExpr__Group_3_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2071:1: ( ( ',' ) )
+            // InternalFlaDsl.g:2072:1: ( ',' )
+            {
+            // InternalFlaDsl.g:2072:1: ( ',' )
+            // InternalFlaDsl.g:2073:1: ','
+            {
+             before(grammarAccess.getOutFailureExprAccess().getCommaKeyword_3_2_0()); 
+            match(input,35,FOLLOW_2); 
+             after(grammarAccess.getOutFailureExprAccess().getCommaKeyword_3_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3_2__0__Impl"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3_2__1"
+    // InternalFlaDsl.g:2086:1: rule__OutFailureExpr__Group_3_2__1 : rule__OutFailureExpr__Group_3_2__1__Impl ;
+    public final void rule__OutFailureExpr__Group_3_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2090:1: ( rule__OutFailureExpr__Group_3_2__1__Impl )
+            // InternalFlaDsl.g:2091:2: rule__OutFailureExpr__Group_3_2__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__Group_3_2__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3_2__1"
+
+
+    // $ANTLR start "rule__OutFailureExpr__Group_3_2__1__Impl"
+    // InternalFlaDsl.g:2097:1: rule__OutFailureExpr__Group_3_2__1__Impl : ( ( rule__OutFailureExpr__FailuresAssignment_3_2_1 ) ) ;
+    public final void rule__OutFailureExpr__Group_3_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2101:1: ( ( ( rule__OutFailureExpr__FailuresAssignment_3_2_1 ) ) )
+            // InternalFlaDsl.g:2102:1: ( ( rule__OutFailureExpr__FailuresAssignment_3_2_1 ) )
+            {
+            // InternalFlaDsl.g:2102:1: ( ( rule__OutFailureExpr__FailuresAssignment_3_2_1 ) )
+            // InternalFlaDsl.g:2103:1: ( rule__OutFailureExpr__FailuresAssignment_3_2_1 )
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_2_1()); 
+            // InternalFlaDsl.g:2104:1: ( rule__OutFailureExpr__FailuresAssignment_3_2_1 )
+            // InternalFlaDsl.g:2104:2: rule__OutFailureExpr__FailuresAssignment_3_2_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__OutFailureExpr__FailuresAssignment_3_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresAssignment_3_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__Group_3_2__1__Impl"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group__0"
+    // InternalFlaDsl.g:2118:1: rule__FailureDefinition__Group__0 : rule__FailureDefinition__Group__0__Impl rule__FailureDefinition__Group__1 ;
+    public final void rule__FailureDefinition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2122:1: ( rule__FailureDefinition__Group__0__Impl rule__FailureDefinition__Group__1 )
+            // InternalFlaDsl.g:2123:2: rule__FailureDefinition__Group__0__Impl rule__FailureDefinition__Group__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__FailureDefinition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group__0"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group__0__Impl"
+    // InternalFlaDsl.g:2130:1: rule__FailureDefinition__Group__0__Impl : ( () ) ;
+    public final void rule__FailureDefinition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2134:1: ( ( () ) )
+            // InternalFlaDsl.g:2135:1: ( () )
+            {
+            // InternalFlaDsl.g:2135:1: ( () )
+            // InternalFlaDsl.g:2136:1: ()
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getFailureDefinitionAction_0()); 
+            // InternalFlaDsl.g:2137:1: ()
+            // InternalFlaDsl.g:2139:1: 
+            {
+            }
+
+             after(grammarAccess.getFailureDefinitionAccess().getFailureDefinitionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group__1"
+    // InternalFlaDsl.g:2149:1: rule__FailureDefinition__Group__1 : rule__FailureDefinition__Group__1__Impl rule__FailureDefinition__Group__2 ;
+    public final void rule__FailureDefinition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2153:1: ( rule__FailureDefinition__Group__1__Impl rule__FailureDefinition__Group__2 )
+            // InternalFlaDsl.g:2154:2: rule__FailureDefinition__Group__1__Impl rule__FailureDefinition__Group__2
+            {
+            pushFollow(FOLLOW_9);
+            rule__FailureDefinition__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group__1"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group__1__Impl"
+    // InternalFlaDsl.g:2161:1: rule__FailureDefinition__Group__1__Impl : ( ( rule__FailureDefinition__TypeAssignment_1 ) ) ;
+    public final void rule__FailureDefinition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2165:1: ( ( ( rule__FailureDefinition__TypeAssignment_1 ) ) )
+            // InternalFlaDsl.g:2166:1: ( ( rule__FailureDefinition__TypeAssignment_1 ) )
+            {
+            // InternalFlaDsl.g:2166:1: ( ( rule__FailureDefinition__TypeAssignment_1 ) )
+            // InternalFlaDsl.g:2167:1: ( rule__FailureDefinition__TypeAssignment_1 )
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getTypeAssignment_1()); 
+            // InternalFlaDsl.g:2168:1: ( rule__FailureDefinition__TypeAssignment_1 )
+            // InternalFlaDsl.g:2168:2: rule__FailureDefinition__TypeAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__TypeAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFailureDefinitionAccess().getTypeAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group__2"
+    // InternalFlaDsl.g:2178:1: rule__FailureDefinition__Group__2 : rule__FailureDefinition__Group__2__Impl ;
+    public final void rule__FailureDefinition__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2182:1: ( rule__FailureDefinition__Group__2__Impl )
+            // InternalFlaDsl.g:2183:2: rule__FailureDefinition__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group__2"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group__2__Impl"
+    // InternalFlaDsl.g:2189:1: rule__FailureDefinition__Group__2__Impl : ( ( rule__FailureDefinition__Group_2__0 )? ) ;
+    public final void rule__FailureDefinition__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2193:1: ( ( ( rule__FailureDefinition__Group_2__0 )? ) )
+            // InternalFlaDsl.g:2194:1: ( ( rule__FailureDefinition__Group_2__0 )? )
+            {
+            // InternalFlaDsl.g:2194:1: ( ( rule__FailureDefinition__Group_2__0 )? )
+            // InternalFlaDsl.g:2195:1: ( rule__FailureDefinition__Group_2__0 )?
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getGroup_2()); 
+            // InternalFlaDsl.g:2196:1: ( rule__FailureDefinition__Group_2__0 )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==36) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // InternalFlaDsl.g:2196:2: rule__FailureDefinition__Group_2__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__FailureDefinition__Group_2__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getFailureDefinitionAccess().getGroup_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group__2__Impl"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group_2__0"
+    // InternalFlaDsl.g:2212:1: rule__FailureDefinition__Group_2__0 : rule__FailureDefinition__Group_2__0__Impl rule__FailureDefinition__Group_2__1 ;
+    public final void rule__FailureDefinition__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2216:1: ( rule__FailureDefinition__Group_2__0__Impl rule__FailureDefinition__Group_2__1 )
+            // InternalFlaDsl.g:2217:2: rule__FailureDefinition__Group_2__0__Impl rule__FailureDefinition__Group_2__1
+            {
+            pushFollow(FOLLOW_13);
+            rule__FailureDefinition__Group_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__Group_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group_2__0"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group_2__0__Impl"
+    // InternalFlaDsl.g:2224:1: rule__FailureDefinition__Group_2__0__Impl : ( '.' ) ;
+    public final void rule__FailureDefinition__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2228:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2229:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2229:1: ( '.' )
+            // InternalFlaDsl.g:2230:1: '.'
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getFullStopKeyword_2_0()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getFailureDefinitionAccess().getFullStopKeyword_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group_2__1"
+    // InternalFlaDsl.g:2243:1: rule__FailureDefinition__Group_2__1 : rule__FailureDefinition__Group_2__1__Impl ;
+    public final void rule__FailureDefinition__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2247:1: ( rule__FailureDefinition__Group_2__1__Impl )
+            // InternalFlaDsl.g:2248:2: rule__FailureDefinition__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__Group_2__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group_2__1"
+
+
+    // $ANTLR start "rule__FailureDefinition__Group_2__1__Impl"
+    // InternalFlaDsl.g:2254:1: rule__FailureDefinition__Group_2__1__Impl : ( ( rule__FailureDefinition__AcidAvoidableAssignment_2_1 ) ) ;
+    public final void rule__FailureDefinition__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2258:1: ( ( ( rule__FailureDefinition__AcidAvoidableAssignment_2_1 ) ) )
+            // InternalFlaDsl.g:2259:1: ( ( rule__FailureDefinition__AcidAvoidableAssignment_2_1 ) )
+            {
+            // InternalFlaDsl.g:2259:1: ( ( rule__FailureDefinition__AcidAvoidableAssignment_2_1 ) )
+            // InternalFlaDsl.g:2260:1: ( rule__FailureDefinition__AcidAvoidableAssignment_2_1 )
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableAssignment_2_1()); 
+            // InternalFlaDsl.g:2261:1: ( rule__FailureDefinition__AcidAvoidableAssignment_2_1 )
+            // InternalFlaDsl.g:2261:2: rule__FailureDefinition__AcidAvoidableAssignment_2_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__FailureDefinition__AcidAvoidableAssignment_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableAssignment_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__NoFailureDefinition__Group__0"
+    // InternalFlaDsl.g:2275:1: rule__NoFailureDefinition__Group__0 : rule__NoFailureDefinition__Group__0__Impl rule__NoFailureDefinition__Group__1 ;
+    public final void rule__NoFailureDefinition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2279:1: ( rule__NoFailureDefinition__Group__0__Impl rule__NoFailureDefinition__Group__1 )
+            // InternalFlaDsl.g:2280:2: rule__NoFailureDefinition__Group__0__Impl rule__NoFailureDefinition__Group__1
+            {
+            pushFollow(FOLLOW_14);
+            rule__NoFailureDefinition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__NoFailureDefinition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NoFailureDefinition__Group__0"
+
+
+    // $ANTLR start "rule__NoFailureDefinition__Group__0__Impl"
+    // InternalFlaDsl.g:2287:1: rule__NoFailureDefinition__Group__0__Impl : ( () ) ;
+    public final void rule__NoFailureDefinition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2291:1: ( ( () ) )
+            // InternalFlaDsl.g:2292:1: ( () )
+            {
+            // InternalFlaDsl.g:2292:1: ( () )
+            // InternalFlaDsl.g:2293:1: ()
+            {
+             before(grammarAccess.getNoFailureDefinitionAccess().getNoFailureDefinitionAction_0()); 
+            // InternalFlaDsl.g:2294:1: ()
+            // InternalFlaDsl.g:2296:1: 
+            {
+            }
+
+             after(grammarAccess.getNoFailureDefinitionAccess().getNoFailureDefinitionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NoFailureDefinition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__NoFailureDefinition__Group__1"
+    // InternalFlaDsl.g:2306:1: rule__NoFailureDefinition__Group__1 : rule__NoFailureDefinition__Group__1__Impl ;
+    public final void rule__NoFailureDefinition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2310:1: ( rule__NoFailureDefinition__Group__1__Impl )
+            // InternalFlaDsl.g:2311:2: rule__NoFailureDefinition__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NoFailureDefinition__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NoFailureDefinition__Group__1"
+
+
+    // $ANTLR start "rule__NoFailureDefinition__Group__1__Impl"
+    // InternalFlaDsl.g:2317:1: rule__NoFailureDefinition__Group__1__Impl : ( 'noFailure' ) ;
+    public final void rule__NoFailureDefinition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2321:1: ( ( 'noFailure' ) )
+            // InternalFlaDsl.g:2322:1: ( 'noFailure' )
+            {
+            // InternalFlaDsl.g:2322:1: ( 'noFailure' )
+            // InternalFlaDsl.g:2323:1: 'noFailure'
+            {
+             before(grammarAccess.getNoFailureDefinitionAccess().getNoFailureKeyword_1()); 
+            match(input,39,FOLLOW_2); 
+             after(grammarAccess.getNoFailureDefinitionAccess().getNoFailureKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NoFailureDefinition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__0"
+    // InternalFlaDsl.g:2340:1: rule__ComplexNofailureDefinition__Group__0 : rule__ComplexNofailureDefinition__Group__0__Impl rule__ComplexNofailureDefinition__Group__1 ;
+    public final void rule__ComplexNofailureDefinition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2344:1: ( rule__ComplexNofailureDefinition__Group__0__Impl rule__ComplexNofailureDefinition__Group__1 )
+            // InternalFlaDsl.g:2345:2: rule__ComplexNofailureDefinition__Group__0__Impl rule__ComplexNofailureDefinition__Group__1
+            {
+            pushFollow(FOLLOW_14);
+            rule__ComplexNofailureDefinition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ComplexNofailureDefinition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__0"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__0__Impl"
+    // InternalFlaDsl.g:2352:1: rule__ComplexNofailureDefinition__Group__0__Impl : ( () ) ;
+    public final void rule__ComplexNofailureDefinition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2356:1: ( ( () ) )
+            // InternalFlaDsl.g:2357:1: ( () )
+            {
+            // InternalFlaDsl.g:2357:1: ( () )
+            // InternalFlaDsl.g:2358:1: ()
+            {
+             before(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureDefinitionAction_0()); 
+            // InternalFlaDsl.g:2359:1: ()
+            // InternalFlaDsl.g:2361:1: 
+            {
+            }
+
+             after(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureDefinitionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__1"
+    // InternalFlaDsl.g:2371:1: rule__ComplexNofailureDefinition__Group__1 : rule__ComplexNofailureDefinition__Group__1__Impl rule__ComplexNofailureDefinition__Group__2 ;
+    public final void rule__ComplexNofailureDefinition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2375:1: ( rule__ComplexNofailureDefinition__Group__1__Impl rule__ComplexNofailureDefinition__Group__2 )
+            // InternalFlaDsl.g:2376:2: rule__ComplexNofailureDefinition__Group__1__Impl rule__ComplexNofailureDefinition__Group__2
+            {
+            pushFollow(FOLLOW_9);
+            rule__ComplexNofailureDefinition__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ComplexNofailureDefinition__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__1"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__1__Impl"
+    // InternalFlaDsl.g:2383:1: rule__ComplexNofailureDefinition__Group__1__Impl : ( 'noFailure' ) ;
+    public final void rule__ComplexNofailureDefinition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2387:1: ( ( 'noFailure' ) )
+            // InternalFlaDsl.g:2388:1: ( 'noFailure' )
+            {
+            // InternalFlaDsl.g:2388:1: ( 'noFailure' )
+            // InternalFlaDsl.g:2389:1: 'noFailure'
+            {
+             before(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureKeyword_1()); 
+            match(input,39,FOLLOW_2); 
+             after(grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__2"
+    // InternalFlaDsl.g:2402:1: rule__ComplexNofailureDefinition__Group__2 : rule__ComplexNofailureDefinition__Group__2__Impl rule__ComplexNofailureDefinition__Group__3 ;
+    public final void rule__ComplexNofailureDefinition__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2406:1: ( rule__ComplexNofailureDefinition__Group__2__Impl rule__ComplexNofailureDefinition__Group__3 )
+            // InternalFlaDsl.g:2407:2: rule__ComplexNofailureDefinition__Group__2__Impl rule__ComplexNofailureDefinition__Group__3
+            {
+            pushFollow(FOLLOW_15);
+            rule__ComplexNofailureDefinition__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ComplexNofailureDefinition__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__2"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__2__Impl"
+    // InternalFlaDsl.g:2414:1: rule__ComplexNofailureDefinition__Group__2__Impl : ( '.' ) ;
+    public final void rule__ComplexNofailureDefinition__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2418:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2419:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2419:1: ( '.' )
+            // InternalFlaDsl.g:2420:1: '.'
+            {
+             before(grammarAccess.getComplexNofailureDefinitionAccess().getFullStopKeyword_2()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getComplexNofailureDefinitionAccess().getFullStopKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__2__Impl"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__3"
+    // InternalFlaDsl.g:2433:1: rule__ComplexNofailureDefinition__Group__3 : rule__ComplexNofailureDefinition__Group__3__Impl ;
+    public final void rule__ComplexNofailureDefinition__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2437:1: ( rule__ComplexNofailureDefinition__Group__3__Impl )
+            // InternalFlaDsl.g:2438:2: rule__ComplexNofailureDefinition__Group__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__ComplexNofailureDefinition__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__3"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__Group__3__Impl"
+    // InternalFlaDsl.g:2444:1: rule__ComplexNofailureDefinition__Group__3__Impl : ( ( rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 ) ) ;
+    public final void rule__ComplexNofailureDefinition__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2448:1: ( ( ( rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 ) ) )
+            // InternalFlaDsl.g:2449:1: ( ( rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 ) )
+            {
+            // InternalFlaDsl.g:2449:1: ( ( rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 ) )
+            // InternalFlaDsl.g:2450:1: ( rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 )
+            {
+             before(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationAssignment_3()); 
+            // InternalFlaDsl.g:2451:1: ( rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 )
+            // InternalFlaDsl.g:2451:2: rule__ComplexNofailureDefinition__AcidMitigationAssignment_3
+            {
+            pushFollow(FOLLOW_2);
+            rule__ComplexNofailureDefinition__AcidMitigationAssignment_3();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__Group__3__Impl"
+
+
+    // $ANTLR start "rule__WildcardDefinition__Group__0"
+    // InternalFlaDsl.g:2469:1: rule__WildcardDefinition__Group__0 : rule__WildcardDefinition__Group__0__Impl rule__WildcardDefinition__Group__1 ;
+    public final void rule__WildcardDefinition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2473:1: ( rule__WildcardDefinition__Group__0__Impl rule__WildcardDefinition__Group__1 )
+            // InternalFlaDsl.g:2474:2: rule__WildcardDefinition__Group__0__Impl rule__WildcardDefinition__Group__1
+            {
+            pushFollow(FOLLOW_16);
+            rule__WildcardDefinition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__WildcardDefinition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__WildcardDefinition__Group__0"
+
+
+    // $ANTLR start "rule__WildcardDefinition__Group__0__Impl"
+    // InternalFlaDsl.g:2481:1: rule__WildcardDefinition__Group__0__Impl : ( () ) ;
+    public final void rule__WildcardDefinition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2485:1: ( ( () ) )
+            // InternalFlaDsl.g:2486:1: ( () )
+            {
+            // InternalFlaDsl.g:2486:1: ( () )
+            // InternalFlaDsl.g:2487:1: ()
+            {
+             before(grammarAccess.getWildcardDefinitionAccess().getWildcardDefinitionAction_0()); 
+            // InternalFlaDsl.g:2488:1: ()
+            // InternalFlaDsl.g:2490:1: 
+            {
+            }
+
+             after(grammarAccess.getWildcardDefinitionAccess().getWildcardDefinitionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__WildcardDefinition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__WildcardDefinition__Group__1"
+    // InternalFlaDsl.g:2500:1: rule__WildcardDefinition__Group__1 : rule__WildcardDefinition__Group__1__Impl ;
+    public final void rule__WildcardDefinition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2504:1: ( rule__WildcardDefinition__Group__1__Impl )
+            // InternalFlaDsl.g:2505:2: rule__WildcardDefinition__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__WildcardDefinition__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__WildcardDefinition__Group__1"
+
+
+    // $ANTLR start "rule__WildcardDefinition__Group__1__Impl"
+    // InternalFlaDsl.g:2511:1: rule__WildcardDefinition__Group__1__Impl : ( 'wildcard' ) ;
+    public final void rule__WildcardDefinition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2515:1: ( ( 'wildcard' ) )
+            // InternalFlaDsl.g:2516:1: ( 'wildcard' )
+            {
+            // InternalFlaDsl.g:2516:1: ( 'wildcard' )
+            // InternalFlaDsl.g:2517:1: 'wildcard'
+            {
+             before(grammarAccess.getWildcardDefinitionAccess().getWildcardKeyword_1()); 
+            match(input,40,FOLLOW_2); 
+             after(grammarAccess.getWildcardDefinitionAccess().getWildcardKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__WildcardDefinition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__VariableDefinition__Group__0"
+    // InternalFlaDsl.g:2534:1: rule__VariableDefinition__Group__0 : rule__VariableDefinition__Group__0__Impl rule__VariableDefinition__Group__1 ;
+    public final void rule__VariableDefinition__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2538:1: ( rule__VariableDefinition__Group__0__Impl rule__VariableDefinition__Group__1 )
+            // InternalFlaDsl.g:2539:2: rule__VariableDefinition__Group__0__Impl rule__VariableDefinition__Group__1
+            {
+            pushFollow(FOLLOW_10);
+            rule__VariableDefinition__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__VariableDefinition__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__VariableDefinition__Group__0"
+
+
+    // $ANTLR start "rule__VariableDefinition__Group__0__Impl"
+    // InternalFlaDsl.g:2546:1: rule__VariableDefinition__Group__0__Impl : ( () ) ;
+    public final void rule__VariableDefinition__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2550:1: ( ( () ) )
+            // InternalFlaDsl.g:2551:1: ( () )
+            {
+            // InternalFlaDsl.g:2551:1: ( () )
+            // InternalFlaDsl.g:2552:1: ()
+            {
+             before(grammarAccess.getVariableDefinitionAccess().getVariableDefinitionAction_0()); 
+            // InternalFlaDsl.g:2553:1: ()
+            // InternalFlaDsl.g:2555:1: 
+            {
+            }
+
+             after(grammarAccess.getVariableDefinitionAccess().getVariableDefinitionAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__VariableDefinition__Group__0__Impl"
+
+
+    // $ANTLR start "rule__VariableDefinition__Group__1"
+    // InternalFlaDsl.g:2565:1: rule__VariableDefinition__Group__1 : rule__VariableDefinition__Group__1__Impl ;
+    public final void rule__VariableDefinition__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2569:1: ( rule__VariableDefinition__Group__1__Impl )
+            // InternalFlaDsl.g:2570:2: rule__VariableDefinition__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__VariableDefinition__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__VariableDefinition__Group__1"
+
+
+    // $ANTLR start "rule__VariableDefinition__Group__1__Impl"
+    // InternalFlaDsl.g:2576:1: rule__VariableDefinition__Group__1__Impl : ( ( rule__VariableDefinition__VariableNameAssignment_1 ) ) ;
+    public final void rule__VariableDefinition__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2580:1: ( ( ( rule__VariableDefinition__VariableNameAssignment_1 ) ) )
+            // InternalFlaDsl.g:2581:1: ( ( rule__VariableDefinition__VariableNameAssignment_1 ) )
+            {
+            // InternalFlaDsl.g:2581:1: ( ( rule__VariableDefinition__VariableNameAssignment_1 ) )
+            // InternalFlaDsl.g:2582:1: ( rule__VariableDefinition__VariableNameAssignment_1 )
+            {
+             before(grammarAccess.getVariableDefinitionAccess().getVariableNameAssignment_1()); 
+            // InternalFlaDsl.g:2583:1: ( rule__VariableDefinition__VariableNameAssignment_1 )
+            // InternalFlaDsl.g:2583:2: rule__VariableDefinition__VariableNameAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__VariableDefinition__VariableNameAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getVariableDefinitionAccess().getVariableNameAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__VariableDefinition__Group__1__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__0"
+    // InternalFlaDsl.g:2597:1: rule__ACIDavoidable__Group__0 : rule__ACIDavoidable__Group__0__Impl rule__ACIDavoidable__Group__1 ;
+    public final void rule__ACIDavoidable__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2601:1: ( rule__ACIDavoidable__Group__0__Impl rule__ACIDavoidable__Group__1 )
+            // InternalFlaDsl.g:2602:2: rule__ACIDavoidable__Group__0__Impl rule__ACIDavoidable__Group__1
+            {
+            pushFollow(FOLLOW_9);
+            rule__ACIDavoidable__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__0"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__0__Impl"
+    // InternalFlaDsl.g:2609:1: rule__ACIDavoidable__Group__0__Impl : ( ( rule__ACIDavoidable__AAssignment_0 ) ) ;
+    public final void rule__ACIDavoidable__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2613:1: ( ( ( rule__ACIDavoidable__AAssignment_0 ) ) )
+            // InternalFlaDsl.g:2614:1: ( ( rule__ACIDavoidable__AAssignment_0 ) )
+            {
+            // InternalFlaDsl.g:2614:1: ( ( rule__ACIDavoidable__AAssignment_0 ) )
+            // InternalFlaDsl.g:2615:1: ( rule__ACIDavoidable__AAssignment_0 )
+            {
+             before(grammarAccess.getACIDavoidableAccess().getAAssignment_0()); 
+            // InternalFlaDsl.g:2616:1: ( rule__ACIDavoidable__AAssignment_0 )
+            // InternalFlaDsl.g:2616:2: rule__ACIDavoidable__AAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__AAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDavoidableAccess().getAAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__0__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__1"
+    // InternalFlaDsl.g:2626:1: rule__ACIDavoidable__Group__1 : rule__ACIDavoidable__Group__1__Impl rule__ACIDavoidable__Group__2 ;
+    public final void rule__ACIDavoidable__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2630:1: ( rule__ACIDavoidable__Group__1__Impl rule__ACIDavoidable__Group__2 )
+            // InternalFlaDsl.g:2631:2: rule__ACIDavoidable__Group__1__Impl rule__ACIDavoidable__Group__2
+            {
+            pushFollow(FOLLOW_17);
+            rule__ACIDavoidable__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__1"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__1__Impl"
+    // InternalFlaDsl.g:2638:1: rule__ACIDavoidable__Group__1__Impl : ( '.' ) ;
+    public final void rule__ACIDavoidable__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2642:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2643:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2643:1: ( '.' )
+            // InternalFlaDsl.g:2644:1: '.'
+            {
+             before(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_1()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__1__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__2"
+    // InternalFlaDsl.g:2657:1: rule__ACIDavoidable__Group__2 : rule__ACIDavoidable__Group__2__Impl rule__ACIDavoidable__Group__3 ;
+    public final void rule__ACIDavoidable__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2661:1: ( rule__ACIDavoidable__Group__2__Impl rule__ACIDavoidable__Group__3 )
+            // InternalFlaDsl.g:2662:2: rule__ACIDavoidable__Group__2__Impl rule__ACIDavoidable__Group__3
+            {
+            pushFollow(FOLLOW_9);
+            rule__ACIDavoidable__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__2"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__2__Impl"
+    // InternalFlaDsl.g:2669:1: rule__ACIDavoidable__Group__2__Impl : ( ( rule__ACIDavoidable__CAssignment_2 ) ) ;
+    public final void rule__ACIDavoidable__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2673:1: ( ( ( rule__ACIDavoidable__CAssignment_2 ) ) )
+            // InternalFlaDsl.g:2674:1: ( ( rule__ACIDavoidable__CAssignment_2 ) )
+            {
+            // InternalFlaDsl.g:2674:1: ( ( rule__ACIDavoidable__CAssignment_2 ) )
+            // InternalFlaDsl.g:2675:1: ( rule__ACIDavoidable__CAssignment_2 )
+            {
+             before(grammarAccess.getACIDavoidableAccess().getCAssignment_2()); 
+            // InternalFlaDsl.g:2676:1: ( rule__ACIDavoidable__CAssignment_2 )
+            // InternalFlaDsl.g:2676:2: rule__ACIDavoidable__CAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__CAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDavoidableAccess().getCAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__2__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__3"
+    // InternalFlaDsl.g:2686:1: rule__ACIDavoidable__Group__3 : rule__ACIDavoidable__Group__3__Impl rule__ACIDavoidable__Group__4 ;
+    public final void rule__ACIDavoidable__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2690:1: ( rule__ACIDavoidable__Group__3__Impl rule__ACIDavoidable__Group__4 )
+            // InternalFlaDsl.g:2691:2: rule__ACIDavoidable__Group__3__Impl rule__ACIDavoidable__Group__4
+            {
+            pushFollow(FOLLOW_18);
+            rule__ACIDavoidable__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__3"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__3__Impl"
+    // InternalFlaDsl.g:2698:1: rule__ACIDavoidable__Group__3__Impl : ( '.' ) ;
+    public final void rule__ACIDavoidable__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2702:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2703:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2703:1: ( '.' )
+            // InternalFlaDsl.g:2704:1: '.'
+            {
+             before(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_3()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__3__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__4"
+    // InternalFlaDsl.g:2717:1: rule__ACIDavoidable__Group__4 : rule__ACIDavoidable__Group__4__Impl rule__ACIDavoidable__Group__5 ;
+    public final void rule__ACIDavoidable__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2721:1: ( rule__ACIDavoidable__Group__4__Impl rule__ACIDavoidable__Group__5 )
+            // InternalFlaDsl.g:2722:2: rule__ACIDavoidable__Group__4__Impl rule__ACIDavoidable__Group__5
+            {
+            pushFollow(FOLLOW_9);
+            rule__ACIDavoidable__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__4"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__4__Impl"
+    // InternalFlaDsl.g:2729:1: rule__ACIDavoidable__Group__4__Impl : ( ( rule__ACIDavoidable__IAssignment_4 ) ) ;
+    public final void rule__ACIDavoidable__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2733:1: ( ( ( rule__ACIDavoidable__IAssignment_4 ) ) )
+            // InternalFlaDsl.g:2734:1: ( ( rule__ACIDavoidable__IAssignment_4 ) )
+            {
+            // InternalFlaDsl.g:2734:1: ( ( rule__ACIDavoidable__IAssignment_4 ) )
+            // InternalFlaDsl.g:2735:1: ( rule__ACIDavoidable__IAssignment_4 )
+            {
+             before(grammarAccess.getACIDavoidableAccess().getIAssignment_4()); 
+            // InternalFlaDsl.g:2736:1: ( rule__ACIDavoidable__IAssignment_4 )
+            // InternalFlaDsl.g:2736:2: rule__ACIDavoidable__IAssignment_4
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__IAssignment_4();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDavoidableAccess().getIAssignment_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__4__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__5"
+    // InternalFlaDsl.g:2746:1: rule__ACIDavoidable__Group__5 : rule__ACIDavoidable__Group__5__Impl rule__ACIDavoidable__Group__6 ;
+    public final void rule__ACIDavoidable__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2750:1: ( rule__ACIDavoidable__Group__5__Impl rule__ACIDavoidable__Group__6 )
+            // InternalFlaDsl.g:2751:2: rule__ACIDavoidable__Group__5__Impl rule__ACIDavoidable__Group__6
+            {
+            pushFollow(FOLLOW_19);
+            rule__ACIDavoidable__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__5"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__5__Impl"
+    // InternalFlaDsl.g:2758:1: rule__ACIDavoidable__Group__5__Impl : ( '.' ) ;
+    public final void rule__ACIDavoidable__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2762:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2763:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2763:1: ( '.' )
+            // InternalFlaDsl.g:2764:1: '.'
+            {
+             before(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_5()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getACIDavoidableAccess().getFullStopKeyword_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__5__Impl"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__6"
+    // InternalFlaDsl.g:2777:1: rule__ACIDavoidable__Group__6 : rule__ACIDavoidable__Group__6__Impl ;
+    public final void rule__ACIDavoidable__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2781:1: ( rule__ACIDavoidable__Group__6__Impl )
+            // InternalFlaDsl.g:2782:2: rule__ACIDavoidable__Group__6__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__Group__6__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__6"
+
+
+    // $ANTLR start "rule__ACIDavoidable__Group__6__Impl"
+    // InternalFlaDsl.g:2788:1: rule__ACIDavoidable__Group__6__Impl : ( ( rule__ACIDavoidable__DAssignment_6 ) ) ;
+    public final void rule__ACIDavoidable__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2792:1: ( ( ( rule__ACIDavoidable__DAssignment_6 ) ) )
+            // InternalFlaDsl.g:2793:1: ( ( rule__ACIDavoidable__DAssignment_6 ) )
+            {
+            // InternalFlaDsl.g:2793:1: ( ( rule__ACIDavoidable__DAssignment_6 ) )
+            // InternalFlaDsl.g:2794:1: ( rule__ACIDavoidable__DAssignment_6 )
+            {
+             before(grammarAccess.getACIDavoidableAccess().getDAssignment_6()); 
+            // InternalFlaDsl.g:2795:1: ( rule__ACIDavoidable__DAssignment_6 )
+            // InternalFlaDsl.g:2795:2: rule__ACIDavoidable__DAssignment_6
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDavoidable__DAssignment_6();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDavoidableAccess().getDAssignment_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__Group__6__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__0"
+    // InternalFlaDsl.g:2819:1: rule__ACIDMitigation__Group__0 : rule__ACIDMitigation__Group__0__Impl rule__ACIDMitigation__Group__1 ;
+    public final void rule__ACIDMitigation__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2823:1: ( rule__ACIDMitigation__Group__0__Impl rule__ACIDMitigation__Group__1 )
+            // InternalFlaDsl.g:2824:2: rule__ACIDMitigation__Group__0__Impl rule__ACIDMitigation__Group__1
+            {
+            pushFollow(FOLLOW_9);
+            rule__ACIDMitigation__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__0"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__0__Impl"
+    // InternalFlaDsl.g:2831:1: rule__ACIDMitigation__Group__0__Impl : ( ( rule__ACIDMitigation__AAssignment_0 ) ) ;
+    public final void rule__ACIDMitigation__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2835:1: ( ( ( rule__ACIDMitigation__AAssignment_0 ) ) )
+            // InternalFlaDsl.g:2836:1: ( ( rule__ACIDMitigation__AAssignment_0 ) )
+            {
+            // InternalFlaDsl.g:2836:1: ( ( rule__ACIDMitigation__AAssignment_0 ) )
+            // InternalFlaDsl.g:2837:1: ( rule__ACIDMitigation__AAssignment_0 )
+            {
+             before(grammarAccess.getACIDMitigationAccess().getAAssignment_0()); 
+            // InternalFlaDsl.g:2838:1: ( rule__ACIDMitigation__AAssignment_0 )
+            // InternalFlaDsl.g:2838:2: rule__ACIDMitigation__AAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__AAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDMitigationAccess().getAAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__0__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__1"
+    // InternalFlaDsl.g:2848:1: rule__ACIDMitigation__Group__1 : rule__ACIDMitigation__Group__1__Impl rule__ACIDMitigation__Group__2 ;
+    public final void rule__ACIDMitigation__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2852:1: ( rule__ACIDMitigation__Group__1__Impl rule__ACIDMitigation__Group__2 )
+            // InternalFlaDsl.g:2853:2: rule__ACIDMitigation__Group__1__Impl rule__ACIDMitigation__Group__2
+            {
+            pushFollow(FOLLOW_20);
+            rule__ACIDMitigation__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__1"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__1__Impl"
+    // InternalFlaDsl.g:2860:1: rule__ACIDMitigation__Group__1__Impl : ( '.' ) ;
+    public final void rule__ACIDMitigation__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2864:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2865:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2865:1: ( '.' )
+            // InternalFlaDsl.g:2866:1: '.'
+            {
+             before(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_1()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__1__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__2"
+    // InternalFlaDsl.g:2879:1: rule__ACIDMitigation__Group__2 : rule__ACIDMitigation__Group__2__Impl rule__ACIDMitigation__Group__3 ;
+    public final void rule__ACIDMitigation__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2883:1: ( rule__ACIDMitigation__Group__2__Impl rule__ACIDMitigation__Group__3 )
+            // InternalFlaDsl.g:2884:2: rule__ACIDMitigation__Group__2__Impl rule__ACIDMitigation__Group__3
+            {
+            pushFollow(FOLLOW_9);
+            rule__ACIDMitigation__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__2"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__2__Impl"
+    // InternalFlaDsl.g:2891:1: rule__ACIDMitigation__Group__2__Impl : ( ( rule__ACIDMitigation__CAssignment_2 ) ) ;
+    public final void rule__ACIDMitigation__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2895:1: ( ( ( rule__ACIDMitigation__CAssignment_2 ) ) )
+            // InternalFlaDsl.g:2896:1: ( ( rule__ACIDMitigation__CAssignment_2 ) )
+            {
+            // InternalFlaDsl.g:2896:1: ( ( rule__ACIDMitigation__CAssignment_2 ) )
+            // InternalFlaDsl.g:2897:1: ( rule__ACIDMitigation__CAssignment_2 )
+            {
+             before(grammarAccess.getACIDMitigationAccess().getCAssignment_2()); 
+            // InternalFlaDsl.g:2898:1: ( rule__ACIDMitigation__CAssignment_2 )
+            // InternalFlaDsl.g:2898:2: rule__ACIDMitigation__CAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__CAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDMitigationAccess().getCAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__2__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__3"
+    // InternalFlaDsl.g:2908:1: rule__ACIDMitigation__Group__3 : rule__ACIDMitigation__Group__3__Impl rule__ACIDMitigation__Group__4 ;
+    public final void rule__ACIDMitigation__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2912:1: ( rule__ACIDMitigation__Group__3__Impl rule__ACIDMitigation__Group__4 )
+            // InternalFlaDsl.g:2913:2: rule__ACIDMitigation__Group__3__Impl rule__ACIDMitigation__Group__4
+            {
+            pushFollow(FOLLOW_21);
+            rule__ACIDMitigation__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__3"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__3__Impl"
+    // InternalFlaDsl.g:2920:1: rule__ACIDMitigation__Group__3__Impl : ( '.' ) ;
+    public final void rule__ACIDMitigation__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2924:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2925:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2925:1: ( '.' )
+            // InternalFlaDsl.g:2926:1: '.'
+            {
+             before(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_3()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__3__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__4"
+    // InternalFlaDsl.g:2939:1: rule__ACIDMitigation__Group__4 : rule__ACIDMitigation__Group__4__Impl rule__ACIDMitigation__Group__5 ;
+    public final void rule__ACIDMitigation__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2943:1: ( rule__ACIDMitigation__Group__4__Impl rule__ACIDMitigation__Group__5 )
+            // InternalFlaDsl.g:2944:2: rule__ACIDMitigation__Group__4__Impl rule__ACIDMitigation__Group__5
+            {
+            pushFollow(FOLLOW_9);
+            rule__ACIDMitigation__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__4"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__4__Impl"
+    // InternalFlaDsl.g:2951:1: rule__ACIDMitigation__Group__4__Impl : ( ( rule__ACIDMitigation__IAssignment_4 ) ) ;
+    public final void rule__ACIDMitigation__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2955:1: ( ( ( rule__ACIDMitigation__IAssignment_4 ) ) )
+            // InternalFlaDsl.g:2956:1: ( ( rule__ACIDMitigation__IAssignment_4 ) )
+            {
+            // InternalFlaDsl.g:2956:1: ( ( rule__ACIDMitigation__IAssignment_4 ) )
+            // InternalFlaDsl.g:2957:1: ( rule__ACIDMitigation__IAssignment_4 )
+            {
+             before(grammarAccess.getACIDMitigationAccess().getIAssignment_4()); 
+            // InternalFlaDsl.g:2958:1: ( rule__ACIDMitigation__IAssignment_4 )
+            // InternalFlaDsl.g:2958:2: rule__ACIDMitigation__IAssignment_4
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__IAssignment_4();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDMitigationAccess().getIAssignment_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__4__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__5"
+    // InternalFlaDsl.g:2968:1: rule__ACIDMitigation__Group__5 : rule__ACIDMitigation__Group__5__Impl rule__ACIDMitigation__Group__6 ;
+    public final void rule__ACIDMitigation__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2972:1: ( rule__ACIDMitigation__Group__5__Impl rule__ACIDMitigation__Group__6 )
+            // InternalFlaDsl.g:2973:2: rule__ACIDMitigation__Group__5__Impl rule__ACIDMitigation__Group__6
+            {
+            pushFollow(FOLLOW_22);
+            rule__ACIDMitigation__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__5"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__5__Impl"
+    // InternalFlaDsl.g:2980:1: rule__ACIDMitigation__Group__5__Impl : ( '.' ) ;
+    public final void rule__ACIDMitigation__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:2984:1: ( ( '.' ) )
+            // InternalFlaDsl.g:2985:1: ( '.' )
+            {
+            // InternalFlaDsl.g:2985:1: ( '.' )
+            // InternalFlaDsl.g:2986:1: '.'
+            {
+             before(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_5()); 
+            match(input,36,FOLLOW_2); 
+             after(grammarAccess.getACIDMitigationAccess().getFullStopKeyword_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__5__Impl"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__6"
+    // InternalFlaDsl.g:2999:1: rule__ACIDMitigation__Group__6 : rule__ACIDMitigation__Group__6__Impl ;
+    public final void rule__ACIDMitigation__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3003:1: ( rule__ACIDMitigation__Group__6__Impl )
+            // InternalFlaDsl.g:3004:2: rule__ACIDMitigation__Group__6__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__Group__6__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__6"
+
+
+    // $ANTLR start "rule__ACIDMitigation__Group__6__Impl"
+    // InternalFlaDsl.g:3010:1: rule__ACIDMitigation__Group__6__Impl : ( ( rule__ACIDMitigation__DAssignment_6 ) ) ;
+    public final void rule__ACIDMitigation__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3014:1: ( ( ( rule__ACIDMitigation__DAssignment_6 ) ) )
+            // InternalFlaDsl.g:3015:1: ( ( rule__ACIDMitigation__DAssignment_6 ) )
+            {
+            // InternalFlaDsl.g:3015:1: ( ( rule__ACIDMitigation__DAssignment_6 ) )
+            // InternalFlaDsl.g:3016:1: ( rule__ACIDMitigation__DAssignment_6 )
+            {
+             before(grammarAccess.getACIDMitigationAccess().getDAssignment_6()); 
+            // InternalFlaDsl.g:3017:1: ( rule__ACIDMitigation__DAssignment_6 )
+            // InternalFlaDsl.g:3017:2: rule__ACIDMitigation__DAssignment_6
+            {
+            pushFollow(FOLLOW_2);
+            rule__ACIDMitigation__DAssignment_6();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getACIDMitigationAccess().getDAssignment_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__Group__6__Impl"
+
+
+    // $ANTLR start "rule__Behaviour__RulesAssignment"
+    // InternalFlaDsl.g:3044:1: rule__Behaviour__RulesAssignment : ( ruleExpression ) ;
+    public final void rule__Behaviour__RulesAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3048:1: ( ( ruleExpression ) )
+            // InternalFlaDsl.g:3049:1: ( ruleExpression )
+            {
+            // InternalFlaDsl.g:3049:1: ( ruleExpression )
+            // InternalFlaDsl.g:3050:1: ruleExpression
+            {
+             before(grammarAccess.getBehaviourAccess().getRulesExpressionParserRuleCall_0()); 
+            pushFollow(FOLLOW_2);
+            ruleExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getBehaviourAccess().getRulesExpressionParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Behaviour__RulesAssignment"
+
+
+    // $ANTLR start "rule__Expression__LhsAssignment_1"
+    // InternalFlaDsl.g:3059:1: rule__Expression__LhsAssignment_1 : ( ruleLhs ) ;
+    public final void rule__Expression__LhsAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3063:1: ( ( ruleLhs ) )
+            // InternalFlaDsl.g:3064:1: ( ruleLhs )
+            {
+            // InternalFlaDsl.g:3064:1: ( ruleLhs )
+            // InternalFlaDsl.g:3065:1: ruleLhs
+            {
+             before(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleLhs();
+
+            state._fsp--;
+
+             after(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__LhsAssignment_1"
+
+
+    // $ANTLR start "rule__Expression__RhsAssignment_3"
+    // InternalFlaDsl.g:3074:1: rule__Expression__RhsAssignment_3 : ( ruleRhs ) ;
+    public final void rule__Expression__RhsAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3078:1: ( ( ruleRhs ) )
+            // InternalFlaDsl.g:3079:1: ( ruleRhs )
+            {
+            // InternalFlaDsl.g:3079:1: ( ruleRhs )
+            // InternalFlaDsl.g:3080:1: ruleRhs
+            {
+             before(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_2);
+            ruleRhs();
+
+            state._fsp--;
+
+             after(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Expression__RhsAssignment_3"
+
+
+    // $ANTLR start "rule__Lhs__FailuresAssignment_0"
+    // InternalFlaDsl.g:3089:1: rule__Lhs__FailuresAssignment_0 : ( ruleInputExpression ) ;
+    public final void rule__Lhs__FailuresAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3093:1: ( ( ruleInputExpression ) )
+            // InternalFlaDsl.g:3094:1: ( ruleInputExpression )
+            {
+            // InternalFlaDsl.g:3094:1: ( ruleInputExpression )
+            // InternalFlaDsl.g:3095:1: ruleInputExpression
+            {
+             before(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleInputExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__FailuresAssignment_0"
+
+
+    // $ANTLR start "rule__Lhs__FailuresAssignment_1_1"
+    // InternalFlaDsl.g:3104:1: rule__Lhs__FailuresAssignment_1_1 : ( ruleInputExpression ) ;
+    public final void rule__Lhs__FailuresAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3108:1: ( ( ruleInputExpression ) )
+            // InternalFlaDsl.g:3109:1: ( ruleInputExpression )
+            {
+            // InternalFlaDsl.g:3109:1: ( ruleInputExpression )
+            // InternalFlaDsl.g:3110:1: ruleInputExpression
+            {
+             before(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleInputExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Lhs__FailuresAssignment_1_1"
+
+
+    // $ANTLR start "rule__Rhs__FailuresAssignment_0"
+    // InternalFlaDsl.g:3119:1: rule__Rhs__FailuresAssignment_0 : ( ruleOutputExpression ) ;
+    public final void rule__Rhs__FailuresAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3123:1: ( ( ruleOutputExpression ) )
+            // InternalFlaDsl.g:3124:1: ( ruleOutputExpression )
+            {
+            // InternalFlaDsl.g:3124:1: ( ruleOutputExpression )
+            // InternalFlaDsl.g:3125:1: ruleOutputExpression
+            {
+             before(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleOutputExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__FailuresAssignment_0"
+
+
+    // $ANTLR start "rule__Rhs__FailuresAssignment_1_1"
+    // InternalFlaDsl.g:3134:1: rule__Rhs__FailuresAssignment_1_1 : ( ruleOutputExpression ) ;
+    public final void rule__Rhs__FailuresAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3138:1: ( ( ruleOutputExpression ) )
+            // InternalFlaDsl.g:3139:1: ( ruleOutputExpression )
+            {
+            // InternalFlaDsl.g:3139:1: ( ruleOutputExpression )
+            // InternalFlaDsl.g:3140:1: ruleOutputExpression
+            {
+             before(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleOutputExpression();
+
+            state._fsp--;
+
+             after(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rhs__FailuresAssignment_1_1"
+
+
+    // $ANTLR start "rule__InputExpression__RefAssignment_0_0"
+    // InternalFlaDsl.g:3149:1: rule__InputExpression__RefAssignment_0_0 : ( ( RULE_ID ) ) ;
+    public final void rule__InputExpression__RefAssignment_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3153:1: ( ( ( RULE_ID ) ) )
+            // InternalFlaDsl.g:3154:1: ( ( RULE_ID ) )
+            {
+            // InternalFlaDsl.g:3154:1: ( ( RULE_ID ) )
+            // InternalFlaDsl.g:3155:1: ( RULE_ID )
+            {
+             before(grammarAccess.getInputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+            // InternalFlaDsl.g:3156:1: ( RULE_ID )
+            // InternalFlaDsl.g:3157:1: RULE_ID
+            {
+             before(grammarAccess.getInputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); 
+            match(input,RULE_ID,FOLLOW_2); 
+             after(grammarAccess.getInputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); 
+
+            }
+
+             after(grammarAccess.getInputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__RefAssignment_0_0"
+
+
+    // $ANTLR start "rule__InputExpression__FailureExprAssignment_2"
+    // InternalFlaDsl.g:3168:1: rule__InputExpression__FailureExprAssignment_2 : ( ruleInFailureExpr ) ;
+    public final void rule__InputExpression__FailureExprAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3172:1: ( ( ruleInFailureExpr ) )
+            // InternalFlaDsl.g:3173:1: ( ruleInFailureExpr )
+            {
+            // InternalFlaDsl.g:3173:1: ( ruleInFailureExpr )
+            // InternalFlaDsl.g:3174:1: ruleInFailureExpr
+            {
+             before(grammarAccess.getInputExpressionAccess().getFailureExprInFailureExprParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleInFailureExpr();
+
+            state._fsp--;
+
+             after(grammarAccess.getInputExpressionAccess().getFailureExprInFailureExprParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InputExpression__FailureExprAssignment_2"
+
+
+    // $ANTLR start "rule__OutputExpression__RefAssignment_0_0"
+    // InternalFlaDsl.g:3183:1: rule__OutputExpression__RefAssignment_0_0 : ( ( RULE_ID ) ) ;
+    public final void rule__OutputExpression__RefAssignment_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3187:1: ( ( ( RULE_ID ) ) )
+            // InternalFlaDsl.g:3188:1: ( ( RULE_ID ) )
+            {
+            // InternalFlaDsl.g:3188:1: ( ( RULE_ID ) )
+            // InternalFlaDsl.g:3189:1: ( RULE_ID )
+            {
+             before(grammarAccess.getOutputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+            // InternalFlaDsl.g:3190:1: ( RULE_ID )
+            // InternalFlaDsl.g:3191:1: RULE_ID
+            {
+             before(grammarAccess.getOutputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); 
+            match(input,RULE_ID,FOLLOW_2); 
+             after(grammarAccess.getOutputExpressionAccess().getRefPortIDTerminalRuleCall_0_0_0_1()); 
+
+            }
+
+             after(grammarAccess.getOutputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__RefAssignment_0_0"
+
+
+    // $ANTLR start "rule__OutputExpression__FailureExprAssignment_2"
+    // InternalFlaDsl.g:3202:1: rule__OutputExpression__FailureExprAssignment_2 : ( ruleOutFailureExpr ) ;
+    public final void rule__OutputExpression__FailureExprAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3206:1: ( ( ruleOutFailureExpr ) )
+            // InternalFlaDsl.g:3207:1: ( ruleOutFailureExpr )
+            {
+            // InternalFlaDsl.g:3207:1: ( ruleOutFailureExpr )
+            // InternalFlaDsl.g:3208:1: ruleOutFailureExpr
+            {
+             before(grammarAccess.getOutputExpressionAccess().getFailureExprOutFailureExprParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleOutFailureExpr();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutputExpressionAccess().getFailureExprOutFailureExprParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutputExpression__FailureExprAssignment_2"
+
+
+    // $ANTLR start "rule__InFailureExpr__FailuresAssignment_0"
+    // InternalFlaDsl.g:3217:1: rule__InFailureExpr__FailuresAssignment_0 : ( ruleWildcardDefinition ) ;
+    public final void rule__InFailureExpr__FailuresAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3221:1: ( ( ruleWildcardDefinition ) )
+            // InternalFlaDsl.g:3222:1: ( ruleWildcardDefinition )
+            {
+            // InternalFlaDsl.g:3222:1: ( ruleWildcardDefinition )
+            // InternalFlaDsl.g:3223:1: ruleWildcardDefinition
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresWildcardDefinitionParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleWildcardDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresWildcardDefinitionParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__FailuresAssignment_0"
+
+
+    // $ANTLR start "rule__InFailureExpr__FailuresAssignment_1"
+    // InternalFlaDsl.g:3232:1: rule__InFailureExpr__FailuresAssignment_1 : ( ruleNoFailureDefinition ) ;
+    public final void rule__InFailureExpr__FailuresAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3236:1: ( ( ruleNoFailureDefinition ) )
+            // InternalFlaDsl.g:3237:1: ( ruleNoFailureDefinition )
+            {
+            // InternalFlaDsl.g:3237:1: ( ruleNoFailureDefinition )
+            // InternalFlaDsl.g:3238:1: ruleNoFailureDefinition
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleNoFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__FailuresAssignment_1"
+
+
+    // $ANTLR start "rule__InFailureExpr__FailuresAssignment_2"
+    // InternalFlaDsl.g:3247:1: rule__InFailureExpr__FailuresAssignment_2 : ( ruleFailureDefinition ) ;
+    public final void rule__InFailureExpr__FailuresAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3251:1: ( ( ruleFailureDefinition ) )
+            // InternalFlaDsl.g:3252:1: ( ruleFailureDefinition )
+            {
+            // InternalFlaDsl.g:3252:1: ( ruleFailureDefinition )
+            // InternalFlaDsl.g:3253:1: ruleFailureDefinition
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__FailuresAssignment_2"
+
+
+    // $ANTLR start "rule__InFailureExpr__FailuresAssignment_3_1"
+    // InternalFlaDsl.g:3262:1: rule__InFailureExpr__FailuresAssignment_3_1 : ( ruleFailureDefinition ) ;
+    public final void rule__InFailureExpr__FailuresAssignment_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3266:1: ( ( ruleFailureDefinition ) )
+            // InternalFlaDsl.g:3267:1: ( ruleFailureDefinition )
+            {
+            // InternalFlaDsl.g:3267:1: ( ruleFailureDefinition )
+            // InternalFlaDsl.g:3268:1: ruleFailureDefinition
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__FailuresAssignment_3_1"
+
+
+    // $ANTLR start "rule__InFailureExpr__FailuresAssignment_3_2_1"
+    // InternalFlaDsl.g:3277:1: rule__InFailureExpr__FailuresAssignment_3_2_1 : ( ruleFailureDefinition ) ;
+    public final void rule__InFailureExpr__FailuresAssignment_3_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3281:1: ( ( ruleFailureDefinition ) )
+            // InternalFlaDsl.g:3282:1: ( ruleFailureDefinition )
+            {
+            // InternalFlaDsl.g:3282:1: ( ruleFailureDefinition )
+            // InternalFlaDsl.g:3283:1: ruleFailureDefinition
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__FailuresAssignment_3_2_1"
+
+
+    // $ANTLR start "rule__InFailureExpr__FailuresAssignment_4"
+    // InternalFlaDsl.g:3292:1: rule__InFailureExpr__FailuresAssignment_4 : ( ruleVariableDefinition ) ;
+    public final void rule__InFailureExpr__FailuresAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3296:1: ( ( ruleVariableDefinition ) )
+            // InternalFlaDsl.g:3297:1: ( ruleVariableDefinition )
+            {
+            // InternalFlaDsl.g:3297:1: ( ruleVariableDefinition )
+            // InternalFlaDsl.g:3298:1: ruleVariableDefinition
+            {
+             before(grammarAccess.getInFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+            pushFollow(FOLLOW_2);
+            ruleVariableDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getInFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__InFailureExpr__FailuresAssignment_4"
+
+
+    // $ANTLR start "rule__OutFailureExpr__FailuresAssignment_0"
+    // InternalFlaDsl.g:3307:1: rule__OutFailureExpr__FailuresAssignment_0 : ( ruleNoFailureDefinition ) ;
+    public final void rule__OutFailureExpr__FailuresAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3311:1: ( ( ruleNoFailureDefinition ) )
+            // InternalFlaDsl.g:3312:1: ( ruleNoFailureDefinition )
+            {
+            // InternalFlaDsl.g:3312:1: ( ruleNoFailureDefinition )
+            // InternalFlaDsl.g:3313:1: ruleNoFailureDefinition
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleNoFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__FailuresAssignment_0"
+
+
+    // $ANTLR start "rule__OutFailureExpr__FailuresAssignment_1"
+    // InternalFlaDsl.g:3322:1: rule__OutFailureExpr__FailuresAssignment_1 : ( ruleComplexNofailureDefinition ) ;
+    public final void rule__OutFailureExpr__FailuresAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3326:1: ( ( ruleComplexNofailureDefinition ) )
+            // InternalFlaDsl.g:3327:1: ( ruleComplexNofailureDefinition )
+            {
+            // InternalFlaDsl.g:3327:1: ( ruleComplexNofailureDefinition )
+            // InternalFlaDsl.g:3328:1: ruleComplexNofailureDefinition
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresComplexNofailureDefinitionParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleComplexNofailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresComplexNofailureDefinitionParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__FailuresAssignment_1"
+
+
+    // $ANTLR start "rule__OutFailureExpr__FailuresAssignment_2"
+    // InternalFlaDsl.g:3337:1: rule__OutFailureExpr__FailuresAssignment_2 : ( ruleFailureDefinition ) ;
+    public final void rule__OutFailureExpr__FailuresAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3341:1: ( ( ruleFailureDefinition ) )
+            // InternalFlaDsl.g:3342:1: ( ruleFailureDefinition )
+            {
+            // InternalFlaDsl.g:3342:1: ( ruleFailureDefinition )
+            // InternalFlaDsl.g:3343:1: ruleFailureDefinition
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__FailuresAssignment_2"
+
+
+    // $ANTLR start "rule__OutFailureExpr__FailuresAssignment_3_1"
+    // InternalFlaDsl.g:3352:1: rule__OutFailureExpr__FailuresAssignment_3_1 : ( ruleFailureDefinition ) ;
+    public final void rule__OutFailureExpr__FailuresAssignment_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3356:1: ( ( ruleFailureDefinition ) )
+            // InternalFlaDsl.g:3357:1: ( ruleFailureDefinition )
+            {
+            // InternalFlaDsl.g:3357:1: ( ruleFailureDefinition )
+            // InternalFlaDsl.g:3358:1: ruleFailureDefinition
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__FailuresAssignment_3_1"
+
+
+    // $ANTLR start "rule__OutFailureExpr__FailuresAssignment_3_2_1"
+    // InternalFlaDsl.g:3367:1: rule__OutFailureExpr__FailuresAssignment_3_2_1 : ( ruleFailureDefinition ) ;
+    public final void rule__OutFailureExpr__FailuresAssignment_3_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3371:1: ( ( ruleFailureDefinition ) )
+            // InternalFlaDsl.g:3372:1: ( ruleFailureDefinition )
+            {
+            // InternalFlaDsl.g:3372:1: ( ruleFailureDefinition )
+            // InternalFlaDsl.g:3373:1: ruleFailureDefinition
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleFailureDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__FailuresAssignment_3_2_1"
+
+
+    // $ANTLR start "rule__OutFailureExpr__FailuresAssignment_4"
+    // InternalFlaDsl.g:3382:1: rule__OutFailureExpr__FailuresAssignment_4 : ( ruleVariableDefinition ) ;
+    public final void rule__OutFailureExpr__FailuresAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3386:1: ( ( ruleVariableDefinition ) )
+            // InternalFlaDsl.g:3387:1: ( ruleVariableDefinition )
+            {
+            // InternalFlaDsl.g:3387:1: ( ruleVariableDefinition )
+            // InternalFlaDsl.g:3388:1: ruleVariableDefinition
+            {
+             before(grammarAccess.getOutFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+            pushFollow(FOLLOW_2);
+            ruleVariableDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getOutFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OutFailureExpr__FailuresAssignment_4"
+
+
+    // $ANTLR start "rule__FailureDefinition__TypeAssignment_1"
+    // InternalFlaDsl.g:3397:1: rule__FailureDefinition__TypeAssignment_1 : ( ruleActualFailureType ) ;
+    public final void rule__FailureDefinition__TypeAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3401:1: ( ( ruleActualFailureType ) )
+            // InternalFlaDsl.g:3402:1: ( ruleActualFailureType )
+            {
+            // InternalFlaDsl.g:3402:1: ( ruleActualFailureType )
+            // InternalFlaDsl.g:3403:1: ruleActualFailureType
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getTypeActualFailureTypeEnumRuleCall_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleActualFailureType();
+
+            state._fsp--;
+
+             after(grammarAccess.getFailureDefinitionAccess().getTypeActualFailureTypeEnumRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__TypeAssignment_1"
+
+
+    // $ANTLR start "rule__FailureDefinition__AcidAvoidableAssignment_2_1"
+    // InternalFlaDsl.g:3412:1: rule__FailureDefinition__AcidAvoidableAssignment_2_1 : ( ruleACIDavoidable ) ;
+    public final void rule__FailureDefinition__AcidAvoidableAssignment_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3416:1: ( ( ruleACIDavoidable ) )
+            // InternalFlaDsl.g:3417:1: ( ruleACIDavoidable )
+            {
+            // InternalFlaDsl.g:3417:1: ( ruleACIDavoidable )
+            // InternalFlaDsl.g:3418:1: ruleACIDavoidable
+            {
+             before(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableACIDavoidableParserRuleCall_2_1_0()); 
+            pushFollow(FOLLOW_2);
+            ruleACIDavoidable();
+
+            state._fsp--;
+
+             after(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableACIDavoidableParserRuleCall_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__FailureDefinition__AcidAvoidableAssignment_2_1"
+
+
+    // $ANTLR start "rule__ComplexNofailureDefinition__AcidMitigationAssignment_3"
+    // InternalFlaDsl.g:3427:1: rule__ComplexNofailureDefinition__AcidMitigationAssignment_3 : ( ruleACIDMitigation ) ;
+    public final void rule__ComplexNofailureDefinition__AcidMitigationAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3431:1: ( ( ruleACIDMitigation ) )
+            // InternalFlaDsl.g:3432:1: ( ruleACIDMitigation )
+            {
+            // InternalFlaDsl.g:3432:1: ( ruleACIDMitigation )
+            // InternalFlaDsl.g:3433:1: ruleACIDMitigation
+            {
+             before(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_2);
+            ruleACIDMitigation();
+
+            state._fsp--;
+
+             after(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ComplexNofailureDefinition__AcidMitigationAssignment_3"
+
+
+    // $ANTLR start "rule__VariableDefinition__VariableNameAssignment_1"
+    // InternalFlaDsl.g:3442:1: rule__VariableDefinition__VariableNameAssignment_1 : ( RULE_ID ) ;
+    public final void rule__VariableDefinition__VariableNameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3446:1: ( ( RULE_ID ) )
+            // InternalFlaDsl.g:3447:1: ( RULE_ID )
+            {
+            // InternalFlaDsl.g:3447:1: ( RULE_ID )
+            // InternalFlaDsl.g:3448:1: RULE_ID
+            {
+             before(grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0()); 
+            match(input,RULE_ID,FOLLOW_2); 
+             after(grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__VariableDefinition__VariableNameAssignment_1"
+
+
+    // $ANTLR start "rule__ACIDavoidable__AAssignment_0"
+    // InternalFlaDsl.g:3457:1: rule__ACIDavoidable__AAssignment_0 : ( ruleAavoidable ) ;
+    public final void rule__ACIDavoidable__AAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3461:1: ( ( ruleAavoidable ) )
+            // InternalFlaDsl.g:3462:1: ( ruleAavoidable )
+            {
+            // InternalFlaDsl.g:3462:1: ( ruleAavoidable )
+            // InternalFlaDsl.g:3463:1: ruleAavoidable
+            {
+             before(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleAavoidable();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__AAssignment_0"
+
+
+    // $ANTLR start "rule__ACIDavoidable__CAssignment_2"
+    // InternalFlaDsl.g:3472:1: rule__ACIDavoidable__CAssignment_2 : ( ruleCavoidable ) ;
+    public final void rule__ACIDavoidable__CAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3476:1: ( ( ruleCavoidable ) )
+            // InternalFlaDsl.g:3477:1: ( ruleCavoidable )
+            {
+            // InternalFlaDsl.g:3477:1: ( ruleCavoidable )
+            // InternalFlaDsl.g:3478:1: ruleCavoidable
+            {
+             before(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleCavoidable();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__CAssignment_2"
+
+
+    // $ANTLR start "rule__ACIDavoidable__IAssignment_4"
+    // InternalFlaDsl.g:3487:1: rule__ACIDavoidable__IAssignment_4 : ( ruleIavoidable ) ;
+    public final void rule__ACIDavoidable__IAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3491:1: ( ( ruleIavoidable ) )
+            // InternalFlaDsl.g:3492:1: ( ruleIavoidable )
+            {
+            // InternalFlaDsl.g:3492:1: ( ruleIavoidable )
+            // InternalFlaDsl.g:3493:1: ruleIavoidable
+            {
+             before(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0()); 
+            pushFollow(FOLLOW_2);
+            ruleIavoidable();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__IAssignment_4"
+
+
+    // $ANTLR start "rule__ACIDavoidable__DAssignment_6"
+    // InternalFlaDsl.g:3502:1: rule__ACIDavoidable__DAssignment_6 : ( ruleDavoidable ) ;
+    public final void rule__ACIDavoidable__DAssignment_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3506:1: ( ( ruleDavoidable ) )
+            // InternalFlaDsl.g:3507:1: ( ruleDavoidable )
+            {
+            // InternalFlaDsl.g:3507:1: ( ruleDavoidable )
+            // InternalFlaDsl.g:3508:1: ruleDavoidable
+            {
+             before(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0()); 
+            pushFollow(FOLLOW_2);
+            ruleDavoidable();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDavoidable__DAssignment_6"
+
+
+    // $ANTLR start "rule__ACIDMitigation__AAssignment_0"
+    // InternalFlaDsl.g:3517:1: rule__ACIDMitigation__AAssignment_0 : ( ruleAmitigation ) ;
+    public final void rule__ACIDMitigation__AAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3521:1: ( ( ruleAmitigation ) )
+            // InternalFlaDsl.g:3522:1: ( ruleAmitigation )
+            {
+            // InternalFlaDsl.g:3522:1: ( ruleAmitigation )
+            // InternalFlaDsl.g:3523:1: ruleAmitigation
+            {
+             before(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0()); 
+            pushFollow(FOLLOW_2);
+            ruleAmitigation();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__AAssignment_0"
+
+
+    // $ANTLR start "rule__ACIDMitigation__CAssignment_2"
+    // InternalFlaDsl.g:3532:1: rule__ACIDMitigation__CAssignment_2 : ( ruleCmitigation ) ;
+    public final void rule__ACIDMitigation__CAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3536:1: ( ( ruleCmitigation ) )
+            // InternalFlaDsl.g:3537:1: ( ruleCmitigation )
+            {
+            // InternalFlaDsl.g:3537:1: ( ruleCmitigation )
+            // InternalFlaDsl.g:3538:1: ruleCmitigation
+            {
+             before(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0()); 
+            pushFollow(FOLLOW_2);
+            ruleCmitigation();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__CAssignment_2"
+
+
+    // $ANTLR start "rule__ACIDMitigation__IAssignment_4"
+    // InternalFlaDsl.g:3547:1: rule__ACIDMitigation__IAssignment_4 : ( ruleImitigation ) ;
+    public final void rule__ACIDMitigation__IAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3551:1: ( ( ruleImitigation ) )
+            // InternalFlaDsl.g:3552:1: ( ruleImitigation )
+            {
+            // InternalFlaDsl.g:3552:1: ( ruleImitigation )
+            // InternalFlaDsl.g:3553:1: ruleImitigation
+            {
+             before(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0()); 
+            pushFollow(FOLLOW_2);
+            ruleImitigation();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__IAssignment_4"
+
+
+    // $ANTLR start "rule__ACIDMitigation__DAssignment_6"
+    // InternalFlaDsl.g:3562:1: rule__ACIDMitigation__DAssignment_6 : ( ruleDmitigation ) ;
+    public final void rule__ACIDMitigation__DAssignment_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // InternalFlaDsl.g:3566:1: ( ( ruleDmitigation ) )
+            // InternalFlaDsl.g:3567:1: ( ruleDmitigation )
+            {
+            // InternalFlaDsl.g:3567:1: ( ruleDmitigation )
+            // InternalFlaDsl.g:3568:1: ruleDmitigation
+            {
+             before(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0()); 
+            pushFollow(FOLLOW_2);
+            ruleDmitigation();
+
+            state._fsp--;
+
+             after(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ACIDMitigation__DAssignment_6"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000100000002L});
+    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000810L});
+    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000800000002L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x000001A00003F010L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x000000000003F000L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x00000000001C0000L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000003180000L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000010000000000L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000000380000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000000580000L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000000980000L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x000000000C180000L});
+    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000030180000L});
+    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x00000000C0180000L});
+
+}
\ No newline at end of file
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/internal/FlaDslActivator.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/internal/FlaDslActivator.java
new file mode 100644
index 0000000..7d03be7
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src-gen/org/polarsys/chess/xtext/ui/internal/FlaDslActivator.java
@@ -0,0 +1,95 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.ui.internal;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.ui.shared.SharedStateModule;
+import org.eclipse.xtext.util.Modules2;
+import org.osgi.framework.BundleContext;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class FlaDslActivator extends AbstractUIPlugin {
+	
+	public static final String ORG_POLARSYS_CHESS_XTEXT_FLADSL = "org.polarsys.chess.xtext.FlaDsl";
+	
+	private static final Logger logger = Logger.getLogger(FlaDslActivator.class);
+	
+	private static FlaDslActivator INSTANCE;
+	
+	private Map<String, Injector> injectors = Collections.synchronizedMap(Maps.<String, Injector> newHashMapWithExpectedSize(1));
+	
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		INSTANCE = this;
+	}
+	
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		injectors.clear();
+		INSTANCE = null;
+		super.stop(context);
+	}
+	
+	public static FlaDslActivator getInstance() {
+		return INSTANCE;
+	}
+	
+	public Injector getInjector(String language) {
+		synchronized (injectors) {
+			Injector injector = injectors.get(language);
+			if (injector == null) {
+				injectors.put(language, injector = createInjector(language));
+			}
+			return injector;
+		}
+	}
+	
+	protected Injector createInjector(String language) {
+		try {
+			Module runtimeModule = getRuntimeModule(language);
+			Module sharedStateModule = getSharedStateModule();
+			Module uiModule = getUiModule(language);
+			Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
+			return Guice.createInjector(mergedModule);
+		} catch (Exception e) {
+			logger.error("Failed to create injector for " + language);
+			logger.error(e.getMessage(), e);
+			throw new RuntimeException("Failed to create injector for " + language, e);
+		}
+	}
+
+	protected Module getRuntimeModule(String grammar) {
+		if (ORG_POLARSYS_CHESS_XTEXT_FLADSL.equals(grammar)) {
+			return new org.polarsys.chess.xtext.FlaDslRuntimeModule();
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getUiModule(String grammar) {
+		if (ORG_POLARSYS_CHESS_XTEXT_FLADSL.equals(grammar)) {
+			return new org.polarsys.chess.xtext.ui.FlaDslUiModule(this);
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getSharedStateModule() {
+		return new SharedStateModule();
+	}
+	
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/FlaDslUiModule.java b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/FlaDslUiModule.java
index e3eae64..cc1fd9b 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/FlaDslUiModule.java
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/FlaDslUiModule.java
@@ -1,21 +1,6 @@
 /*

  * generated by Xtext

  */

-/*------------------------------------------------------------------------------

- -

- - Copyright (c) 2013, 2015 Intecs SpA 

- - 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:

- - 

- - Stefano Puri stefano.puri@intecs.it

- -  

- - Initial API and implementation and/or initial documentation

- ------------------------------------------------------------------------------*/

-

 package org.polarsys.chess.xtext.ui;

 

 import org.eclipse.ui.plugin.AbstractUIPlugin;

@@ -23,7 +8,7 @@
 /**

  * Use this class to register components to be used within the IDE.

  */

-public class FlaDslUiModule extends org.polarsys.chess.xtext.ui.AbstractFlaDslUiModule{

+public class FlaDslUiModule extends org.polarsys.chess.xtext.ui.AbstractFlaDslUiModule {

 	public FlaDslUiModule(AbstractUIPlugin plugin) {

 		super(plugin);

 	}

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/contentassist/FlaDslProposalProvider.xtend b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/contentassist/FlaDslProposalProvider.xtend
index 4a15321..a930674 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/contentassist/FlaDslProposalProvider.xtend
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl.ui/src/org/polarsys/chess/xtext/ui/contentassist/FlaDslProposalProvider.xtend
@@ -1,21 +1,6 @@
 /*

  * generated by Xtext

  */

- /*------------------------------------------------------------------------------

- -

- - Copyright (c) 2013, 2015 Intecs SpA 

- - 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:

- - 

- - Stefano Puri stefano.puri@intecs.it

- -  

- - Initial API and implementation and/or initial documentation

- ------------------------------------------------------------------------------*/

- 

 package org.polarsys.chess.xtext.ui.contentassist

 

 import org.polarsys.chess.xtext.ui.contentassist.AbstractFlaDslProposalProvider

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/.classpath b/plugins/fla/org.polarsys.chess.xtext.fladsl/.classpath
index 4a3597e..29ba398 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl/.classpath
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/.classpath
@@ -1,9 +1,9 @@
-<?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="src" path="xtend-gen"/>
-	<classpathentry kind="src" path="src-gen"/>
-	<classpathentry kind="output" path="bin"/>
-</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-1.8"/>

+	<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-gen"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/META-INF/MANIFEST.MF b/plugins/fla/org.polarsys.chess.xtext.fladsl/META-INF/MANIFEST.MF
index 9191cea..73e2b6a 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl/META-INF/MANIFEST.MF
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/META-INF/MANIFEST.MF
@@ -27,15 +27,15 @@
 Import-Package: org.apache.log4j,

  org.eclipse.xtext.xbase.lib

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

-Export-Package: org.polarsys.chess.xtext.flaDsl,

- org.polarsys.chess.xtext.flaDsl.impl,

- org.polarsys.chess.xtext.flaDsl.util,

- org.polarsys.chess.xtext.parser.antlr,

- org.polarsys.chess.xtext.parser.antlr.internal,

- org.polarsys.chess.xtext.serializer,

- org.polarsys.chess.xtext.services,

- org.polarsys.chess.xtext,

+Export-Package: org.polarsys.chess.xtext,

  org.polarsys.chess.xtext.formatting,

  org.polarsys.chess.xtext.generator,

  org.polarsys.chess.xtext.scoping,

- org.polarsys.chess.xtext.validation

+ org.polarsys.chess.xtext.validation,

+ org.polarsys.chess.xtext.services,

+ org.polarsys.chess.xtext.flaDsl,

+ org.polarsys.chess.xtext.flaDsl.impl,

+ org.polarsys.chess.xtext.flaDsl.util,

+ org.polarsys.chess.xtext.serializer,

+ org.polarsys.chess.xtext.parser.antlr,

+ org.polarsys.chess.xtext.parser.antlr.internal

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/model/generated/FlaDsl.ecore b/plugins/fla/org.polarsys.chess.xtext.fladsl/model/generated/FlaDsl.ecore
new file mode 100644
index 0000000..893b767
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/model/generated/FlaDsl.ecore
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="flaDsl" nsURI="http://www.intecs.org/chess/xtext/FlaDsl" nsPrefix="flaDsl">
+  <eClassifiers xsi:type="ecore:EClass" name="Behaviour">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rules" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="lhs" eType="#//Lhs" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rhs" eType="#//Rhs" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Lhs">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="failures" upperBound="-1"
+        eType="#//InputExpression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Rhs">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="failures" upperBound="-1"
+        eType="#//OutputExpression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="InputExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ref" eType="ecore:EClass platform:/resource/org.eclipse.uml2.uml/model/UML.ecore#//Port"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="failureExpr" eType="#//InFailureExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OutputExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ref" eType="ecore:EClass platform:/resource/org.eclipse.uml2.uml/model/UML.ecore#//Port"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="failureExpr" eType="#//OutFailureExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="InFailureExpr">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="failures" upperBound="-1"
+        eType="#//Definitions" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OutFailureExpr">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="failures" upperBound="-1"
+        eType="#//Definitions" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Definitions"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FailureDefinition" eSuperTypes="#//Definitions">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="#//FailureType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="acidAvoidable" eType="#//ACIDavoidable"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NoFailureDefinition" eSuperTypes="#//Definitions #//ComplexNofailureDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="acidMitigation" eType="#//ACIDMitigation"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ComplexNofailureDefinition" eSuperTypes="#//Definitions"/>
+  <eClassifiers xsi:type="ecore:EClass" name="WildcardDefinition" eSuperTypes="#//Definitions"/>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableDefinition" eSuperTypes="#//Definitions">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variableName" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="FailureType">
+    <eLiterals name="NO_FAILURE" literal="noFailure"/>
+    <eLiterals name="EARLY" value="1" literal="early"/>
+    <eLiterals name="LATE" value="2" literal="late"/>
+    <eLiterals name="COMMISSION" value="3" literal="commission"/>
+    <eLiterals name="OMISSION" value="4" literal="omission"/>
+    <eLiterals name="VALUE_SUBTLE" value="5" literal="valueSubtle"/>
+    <eLiterals name="VALUE_COARSE" value="6" literal="valueCoarse"/>
+    <eLiterals name="WILDCARD" value="7" literal="wildcard"/>
+    <eLiterals name="VARIABLE" value="8" literal="variable"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ACIDavoidable">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="a" eType="#//Aavoidable"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="c" eType="#//Cavoidable"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="i" eType="#//Iavoidable"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="d" eType="#//Davoidable"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Aavoidable">
+    <eLiterals name="INCOMPLETION" literal="incompletion"/>
+    <eLiterals name="NONE" value="1" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="2" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Cavoidable">
+    <eLiterals name="INCONSISTENCY" literal="inconsistency"/>
+    <eLiterals name="NONE" value="1" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="2" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Iavoidable">
+    <eLiterals name="INTERFERENCE" literal="interference"/>
+    <eLiterals name="NONE" value="1" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="2" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Davoidable">
+    <eLiterals name="IMPERMANENCE" literal="impermanence"/>
+    <eLiterals name="NONE" value="1" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="2" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ACIDMitigation">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="a" eType="#//Amitigation"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="c" eType="#//Cmitigation"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="i" eType="#//Imitigation"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="d" eType="#//Dmitigation"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Amitigation">
+    <eLiterals name="ALL_OR_NOTHING" literal="all_or_nothing"/>
+    <eLiterals name="ALL_OR_COMPENSATION" value="1" literal="all_or_compensation"/>
+    <eLiterals name="NONE" value="2" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="3" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Cmitigation">
+    <eLiterals name="FULL_CONSISTENCY" literal="full_consistency"/>
+    <eLiterals name="RANGE_VIOLATION_ALLOWED" value="1" literal="range_violation_allowed"/>
+    <eLiterals name="NONE" value="2" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="3" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Imitigation">
+    <eLiterals name="SERIALIZABLE" literal="serializable"/>
+    <eLiterals name="PORTABLE_LEVEL" value="1" literal="portable_level"/>
+    <eLiterals name="NONE" value="2" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="3" literal="unspecified"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Dmitigation">
+    <eLiterals name="NO_LOSS" literal="no_loss"/>
+    <eLiterals name="PARTIAL_LOSS_ALLOWED" value="1" literal="partial_loss_allowed"/>
+    <eLiterals name="NONE" value="2" literal="none"/>
+    <eLiterals name="UNSPECIFIED" value="3" literal="unspecified"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/model/generated/FlaDsl.genmodel b/plugins/fla/org.polarsys.chess.xtext.fladsl/model/generated/FlaDsl.genmodel
new file mode 100644
index 0000000..4caeb42
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/model/generated/FlaDsl.genmodel
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.polarsys.chess.xtext.fladsl/src-gen" editDirectory="/org.polarsys.chess.xtext.fladsl.edit/src"
+    editorDirectory="/org.polarsys.chess.xtext.fladsl.editor/src" modelPluginID="org.polarsys.chess.xtext.fladsl"
+    forceOverwrite="true" modelName="FlaDsl" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    complianceLevel="6.0" copyrightFields="false" editPluginID="org.polarsys.chess.xtext.fladsl.edit"
+    editorPluginID="org.polarsys.chess.xtext.fladsl.editor" runtimeVersion="2.12"
+    usedGenPackages="platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore platform:/resource/org.eclipse.uml2.uml/model/UML.genmodel#//uml">
+  <genPackages prefix="FlaDsl" basePackage="org.polarsys.chess.xtext" disposableProviderFactory="true"
+      fileExtensions="fladsl" ecorePackage="FlaDsl.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//FailureType">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/NO_FAILURE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/EARLY"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/LATE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/COMMISSION"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/OMISSION"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/VALUE_SUBTLE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/VALUE_COARSE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/WILDCARD"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//FailureType/VARIABLE"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Aavoidable">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Aavoidable/INCOMPLETION"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Aavoidable/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Aavoidable/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Cavoidable">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cavoidable/INCONSISTENCY"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cavoidable/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cavoidable/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Iavoidable">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Iavoidable/INTERFERENCE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Iavoidable/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Iavoidable/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Davoidable">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Davoidable/IMPERMANENCE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Davoidable/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Davoidable/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Amitigation">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Amitigation/ALL_OR_NOTHING"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Amitigation/ALL_OR_COMPENSATION"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Amitigation/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Amitigation/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Cmitigation">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cmitigation/FULL_CONSISTENCY"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cmitigation/RANGE_VIOLATION_ALLOWED"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cmitigation/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Cmitigation/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Imitigation">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Imitigation/SERIALIZABLE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Imitigation/PORTABLE_LEVEL"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Imitigation/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Imitigation/UNSPECIFIED"/>
+    </genEnums>
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FlaDsl.ecore#//Dmitigation">
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Dmitigation/NO_LOSS"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Dmitigation/PARTIAL_LOSS_ALLOWED"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Dmitigation/NONE"/>
+      <genEnumLiterals ecoreEnumLiteral="FlaDsl.ecore#//Dmitigation/UNSPECIFIED"/>
+    </genEnums>
+    <genClasses ecoreClass="FlaDsl.ecore#//Behaviour">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//Behaviour/rules"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//Expression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//Expression/lhs"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//Expression/rhs"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//Lhs">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//Lhs/failures"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//Rhs">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//Rhs/failures"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//InputExpression">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//InputExpression/ref"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//InputExpression/failureExpr"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//OutputExpression">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//OutputExpression/ref"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//OutputExpression/failureExpr"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//InFailureExpr">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//InFailureExpr/failures"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//OutFailureExpr">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//OutFailureExpr/failures"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//Definitions"/>
+    <genClasses ecoreClass="FlaDsl.ecore#//FailureDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//FailureDefinition/type"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//FailureDefinition/acidAvoidable"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//NoFailureDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FlaDsl.ecore#//NoFailureDefinition/acidMitigation"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//ComplexNofailureDefinition"/>
+    <genClasses ecoreClass="FlaDsl.ecore#//WildcardDefinition"/>
+    <genClasses ecoreClass="FlaDsl.ecore#//VariableDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//VariableDefinition/variableName"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//ACIDavoidable">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDavoidable/a"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDavoidable/c"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDavoidable/i"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDavoidable/d"/>
+    </genClasses>
+    <genClasses ecoreClass="FlaDsl.ecore#//ACIDMitigation">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDMitigation/a"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDMitigation/c"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDMitigation/i"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FlaDsl.ecore#//ACIDMitigation/d"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/plugin.xml_gen b/plugins/fla/org.polarsys.chess.xtext.fladsl/plugin.xml_gen
index eb3f0e7..ca15dd9 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl/plugin.xml_gen
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/plugin.xml_gen
@@ -1,16 +1,16 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<plugin>
-
-  <extension point="org.eclipse.emf.ecore.generated_package">
-    <package 
-       uri = "http://www.intecs.org/chess/xtext/FlaDsl" 
-       class = "org.polarsys.chess.xtext.flaDsl.FlaDslPackage"
-       genModel = "model/generated/FlaDsl.genmodel" /> 
-	
-  </extension>
-
-
-
-</plugin>
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<plugin>

+

+  <extension point="org.eclipse.emf.ecore.generated_package">

+    <package 

+       uri = "http://www.intecs.org/chess/xtext/FlaDsl" 

+       class = "org.polarsys.chess.xtext.flaDsl.FlaDslPackage"

+       genModel = "model/generated/FlaDsl.genmodel" /> 

+	

+  </extension>

+

+

+

+</plugin>

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/AbstractFlaDslRuntimeModule.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/AbstractFlaDslRuntimeModule.java
new file mode 100644
index 0000000..d25a7cd
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/AbstractFlaDslRuntimeModule.java
@@ -0,0 +1,156 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext;
+
+import java.util.Properties;
+
+import org.eclipse.xtext.Constants;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+
+/**
+ * Manual modifications go to {org.polarsys.chess.xtext.FlaDslRuntimeModule}
+ */
+@SuppressWarnings("all")
+public abstract class AbstractFlaDslRuntimeModule extends org.eclipse.xtext.common.types.DefaultCommonTypesRuntimeModule {
+
+	protected Properties properties = null;
+
+	@Override
+	public void configure(Binder binder) {
+		properties = tryBindProperties(binder, "org/polarsys/chess/xtext/FlaDsl.properties");
+		super.configure(binder);
+	}
+	
+	public void configureLanguageName(Binder binder) {
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance("org.polarsys.chess.xtext.FlaDsl");
+	}
+	
+	public void configureFileExtensions(Binder binder) {
+		if (properties == null || properties.getProperty(Constants.FILE_EXTENSIONS) == null)
+			binder.bind(String.class).annotatedWith(Names.named(Constants.FILE_EXTENSIONS)).toInstance("fladsl");
+	}
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public java.lang.ClassLoader bindClassLoaderToInstance() {
+		return getClass().getClassLoader();
+	}
+
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return org.polarsys.chess.xtext.services.FlaDslGrammarAccess.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.serializer.SerializerFragment
+	public Class<? extends org.eclipse.xtext.serializer.sequencer.ISemanticSequencer> bindISemanticSequencer() {
+		return org.polarsys.chess.xtext.serializer.FlaDslSemanticSequencer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.serializer.SerializerFragment
+	public Class<? extends org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer> bindISyntacticSequencer() {
+		return org.polarsys.chess.xtext.serializer.FlaDslSyntacticSequencer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.serializer.SerializerFragment
+	public Class<? extends org.eclipse.xtext.serializer.ISerializer> bindISerializer() {
+		return org.eclipse.xtext.serializer.impl.Serializer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
+		return org.polarsys.chess.xtext.parser.antlr.FlaDslParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.ITokenToStringConverter> bindITokenToStringConverter() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
+		return org.polarsys.chess.xtext.parser.antlr.FlaDslAntlrTokenFileProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.Lexer> bindLexer() {
+		return org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslLexer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public com.google.inject.Provider<org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslLexer> provideInternalFlaDslLexer() {
+		return org.eclipse.xtext.parser.antlr.LexerProvider.create(org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureRuntimeLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.parser.antlr.LexerBindings.RUNTIME)).to(org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.ITokenDefProvider> bindITokenDefProvider() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.ValidatorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.polarsys.chess.xtext.validation.FlaDslValidator> bindFlaDslValidator() {
+		return org.polarsys.chess.xtext.validation.FlaDslValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public Class<? extends org.eclipse.xtext.scoping.IScopeProvider> bindIScopeProvider() {
+		return org.polarsys.chess.xtext.scoping.FlaDslScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public void configureIScopeProviderDelegate(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.scoping.IScopeProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider.NAMED_DELEGATE)).to(org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public void configureIgnoreCaseLinking(com.google.inject.Binder binder) {
+		binder.bindConstant().annotatedWith(org.eclipse.xtext.scoping.IgnoreCaseLinking.class).to(false);
+	}
+
+	// contributed by org.eclipse.xtext.generator.exporting.QualifiedNamesFragment
+	public Class<? extends org.eclipse.xtext.naming.IQualifiedNameProvider> bindIQualifiedNameProvider() {
+		return org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.resource.IContainer.Manager> bindIContainer$Manager() {
+		return org.eclipse.xtext.resource.containers.StateBasedContainerManager.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.resource.containers.IAllContainersState.Provider> bindIAllContainersState$Provider() {
+		return org.eclipse.xtext.resource.containers.ResourceSetBasedAllContainersStateProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptions(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).to(org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptionsPersisted(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider.PERSISTED_DESCRIPTIONS)).to(org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public Class<? extends org.eclipse.xtext.generator.IGenerator> bindIGenerator() {
+		return org.polarsys.chess.xtext.generator.FlaDslGenerator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.formatting.FormatterFragment
+	public Class<? extends org.eclipse.xtext.formatting.IFormatter> bindIFormatter() {
+		return org.polarsys.chess.xtext.formatting.FlaDslFormatter.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.scoping.IGlobalScopeProvider> bindIGlobalScopeProvider() {
+		return org.eclipse.xtext.common.types.xtext.TypesAwareDefaultGlobalScopeProvider.class;
+	}
+
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/FlaDsl.xtextbin b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/FlaDsl.xtextbin
new file mode 100644
index 0000000..23ee3c8
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/FlaDsl.xtextbin
Binary files differ
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/FlaDslStandaloneSetupGenerated.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/FlaDslStandaloneSetupGenerated.java
new file mode 100644
index 0000000..10a22a2
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/FlaDslStandaloneSetupGenerated.java
@@ -0,0 +1,45 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.ISetup;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Generated from StandaloneSetup.xpt!
+ */
+@SuppressWarnings("all")
+public class FlaDslStandaloneSetupGenerated implements ISetup {
+
+	@Override
+	public Injector createInjectorAndDoEMFRegistration() {
+		org.eclipse.xtext.common.TerminalsStandaloneSetup.doSetup();
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new org.polarsys.chess.xtext.FlaDslRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+	if (!EPackage.Registry.INSTANCE.containsKey("http://www.intecs.org/chess/xtext/FlaDsl")) {
+		EPackage.Registry.INSTANCE.put("http://www.intecs.org/chess/xtext/FlaDsl", org.polarsys.chess.xtext.flaDsl.FlaDslPackage.eINSTANCE);
+	}
+
+		org.eclipse.xtext.resource.IResourceFactory resourceFactory = injector.getInstance(org.eclipse.xtext.resource.IResourceFactory.class);
+		org.eclipse.xtext.resource.IResourceServiceProvider serviceProvider = injector.getInstance(org.eclipse.xtext.resource.IResourceServiceProvider.class);
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("fladsl", resourceFactory);
+		org.eclipse.xtext.resource.IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("fladsl", serviceProvider);
+		
+
+
+	}
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ACIDMitigation.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ACIDMitigation.java
new file mode 100644
index 0000000..818ea51
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ACIDMitigation.java
@@ -0,0 +1,144 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>ACID Mitigation</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getA <em>A</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getC <em>C</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getI <em>I</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getD <em>D</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDMitigation()
+ * @model
+ * @generated
+ */
+public interface ACIDMitigation extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>A</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Amitigation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>A</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>A</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Amitigation
+   * @see #setA(Amitigation)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDMitigation_A()
+   * @model
+   * @generated
+   */
+  Amitigation getA();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getA <em>A</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>A</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Amitigation
+   * @see #getA()
+   * @generated
+   */
+  void setA(Amitigation value);
+
+  /**
+   * Returns the value of the '<em><b>C</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Cmitigation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>C</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>C</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Cmitigation
+   * @see #setC(Cmitigation)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDMitigation_C()
+   * @model
+   * @generated
+   */
+  Cmitigation getC();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getC <em>C</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>C</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Cmitigation
+   * @see #getC()
+   * @generated
+   */
+  void setC(Cmitigation value);
+
+  /**
+   * Returns the value of the '<em><b>I</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Imitigation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>I</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>I</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Imitigation
+   * @see #setI(Imitigation)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDMitigation_I()
+   * @model
+   * @generated
+   */
+  Imitigation getI();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getI <em>I</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>I</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Imitigation
+   * @see #getI()
+   * @generated
+   */
+  void setI(Imitigation value);
+
+  /**
+   * Returns the value of the '<em><b>D</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Dmitigation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>D</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>D</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Dmitigation
+   * @see #setD(Dmitigation)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDMitigation_D()
+   * @model
+   * @generated
+   */
+  Dmitigation getD();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getD <em>D</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>D</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Dmitigation
+   * @see #getD()
+   * @generated
+   */
+  void setD(Dmitigation value);
+
+} // ACIDMitigation
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ACIDavoidable.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ACIDavoidable.java
new file mode 100644
index 0000000..9c9f407
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ACIDavoidable.java
@@ -0,0 +1,144 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>ACI Davoidable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getA <em>A</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getC <em>C</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getI <em>I</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getD <em>D</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDavoidable()
+ * @model
+ * @generated
+ */
+public interface ACIDavoidable extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>A</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Aavoidable}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>A</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>A</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Aavoidable
+   * @see #setA(Aavoidable)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDavoidable_A()
+   * @model
+   * @generated
+   */
+  Aavoidable getA();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getA <em>A</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>A</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Aavoidable
+   * @see #getA()
+   * @generated
+   */
+  void setA(Aavoidable value);
+
+  /**
+   * Returns the value of the '<em><b>C</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Cavoidable}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>C</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>C</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Cavoidable
+   * @see #setC(Cavoidable)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDavoidable_C()
+   * @model
+   * @generated
+   */
+  Cavoidable getC();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getC <em>C</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>C</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Cavoidable
+   * @see #getC()
+   * @generated
+   */
+  void setC(Cavoidable value);
+
+  /**
+   * Returns the value of the '<em><b>I</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Iavoidable}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>I</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>I</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Iavoidable
+   * @see #setI(Iavoidable)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDavoidable_I()
+   * @model
+   * @generated
+   */
+  Iavoidable getI();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getI <em>I</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>I</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Iavoidable
+   * @see #getI()
+   * @generated
+   */
+  void setI(Iavoidable value);
+
+  /**
+   * Returns the value of the '<em><b>D</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.Davoidable}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>D</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>D</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Davoidable
+   * @see #setD(Davoidable)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getACIDavoidable_D()
+   * @model
+   * @generated
+   */
+  Davoidable getD();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getD <em>D</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>D</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.Davoidable
+   * @see #getD()
+   * @generated
+   */
+  void setD(Davoidable value);
+
+} // ACIDavoidable
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Aavoidable.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Aavoidable.java
new file mode 100644
index 0000000..945f2c8
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Aavoidable.java
@@ -0,0 +1,256 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Aavoidable</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getAavoidable()
+ * @model
+ * @generated
+ */
+public enum Aavoidable implements Enumerator
+{
+  /**
+   * The '<em><b>INCOMPLETION</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #INCOMPLETION_VALUE
+   * @generated
+   * @ordered
+   */
+  INCOMPLETION(0, "INCOMPLETION", "incompletion"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(1, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(2, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>INCOMPLETION</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>INCOMPLETION</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #INCOMPLETION
+   * @model literal="incompletion"
+   * @generated
+   * @ordered
+   */
+  public static final int INCOMPLETION_VALUE = 0;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 1;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 2;
+
+  /**
+   * An array of all the '<em><b>Aavoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Aavoidable[] VALUES_ARRAY =
+    new Aavoidable[]
+    {
+      INCOMPLETION,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Aavoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Aavoidable> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Aavoidable</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Aavoidable get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Aavoidable result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Aavoidable</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Aavoidable getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Aavoidable result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Aavoidable</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Aavoidable get(int value)
+  {
+    switch (value)
+    {
+      case INCOMPLETION_VALUE: return INCOMPLETION;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Aavoidable(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Aavoidable
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Amitigation.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Amitigation.java
new file mode 100644
index 0000000..1be6da8
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Amitigation.java
@@ -0,0 +1,283 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Amitigation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getAmitigation()
+ * @model
+ * @generated
+ */
+public enum Amitigation implements Enumerator
+{
+  /**
+   * The '<em><b>ALL OR NOTHING</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #ALL_OR_NOTHING_VALUE
+   * @generated
+   * @ordered
+   */
+  ALL_OR_NOTHING(0, "ALL_OR_NOTHING", "all_or_nothing"),
+
+  /**
+   * The '<em><b>ALL OR COMPENSATION</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #ALL_OR_COMPENSATION_VALUE
+   * @generated
+   * @ordered
+   */
+  ALL_OR_COMPENSATION(1, "ALL_OR_COMPENSATION", "all_or_compensation"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(2, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(3, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>ALL OR NOTHING</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>ALL OR NOTHING</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #ALL_OR_NOTHING
+   * @model literal="all_or_nothing"
+   * @generated
+   * @ordered
+   */
+  public static final int ALL_OR_NOTHING_VALUE = 0;
+
+  /**
+   * The '<em><b>ALL OR COMPENSATION</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>ALL OR COMPENSATION</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #ALL_OR_COMPENSATION
+   * @model literal="all_or_compensation"
+   * @generated
+   * @ordered
+   */
+  public static final int ALL_OR_COMPENSATION_VALUE = 1;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 2;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 3;
+
+  /**
+   * An array of all the '<em><b>Amitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Amitigation[] VALUES_ARRAY =
+    new Amitigation[]
+    {
+      ALL_OR_NOTHING,
+      ALL_OR_COMPENSATION,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Amitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Amitigation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Amitigation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Amitigation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Amitigation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Amitigation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Amitigation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Amitigation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Amitigation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Amitigation get(int value)
+  {
+    switch (value)
+    {
+      case ALL_OR_NOTHING_VALUE: return ALL_OR_NOTHING;
+      case ALL_OR_COMPENSATION_VALUE: return ALL_OR_COMPENSATION;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Amitigation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Amitigation
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Behaviour.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Behaviour.java
new file mode 100644
index 0000000..ab762ea
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Behaviour.java
@@ -0,0 +1,43 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Behaviour</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.Behaviour#getRules <em>Rules</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getBehaviour()
+ * @model
+ * @generated
+ */
+public interface Behaviour extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Rules</b></em>' containment reference list.
+   * The list contents are of type {@link org.polarsys.chess.xtext.flaDsl.Expression}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rules</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rules</em>' containment reference list.
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getBehaviour_Rules()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Expression> getRules();
+
+} // Behaviour
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Cavoidable.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Cavoidable.java
new file mode 100644
index 0000000..c4d9c9a
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Cavoidable.java
@@ -0,0 +1,256 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Cavoidable</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getCavoidable()
+ * @model
+ * @generated
+ */
+public enum Cavoidable implements Enumerator
+{
+  /**
+   * The '<em><b>INCONSISTENCY</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #INCONSISTENCY_VALUE
+   * @generated
+   * @ordered
+   */
+  INCONSISTENCY(0, "INCONSISTENCY", "inconsistency"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(1, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(2, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>INCONSISTENCY</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>INCONSISTENCY</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #INCONSISTENCY
+   * @model literal="inconsistency"
+   * @generated
+   * @ordered
+   */
+  public static final int INCONSISTENCY_VALUE = 0;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 1;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 2;
+
+  /**
+   * An array of all the '<em><b>Cavoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Cavoidable[] VALUES_ARRAY =
+    new Cavoidable[]
+    {
+      INCONSISTENCY,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Cavoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Cavoidable> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Cavoidable</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Cavoidable get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Cavoidable result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Cavoidable</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Cavoidable getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Cavoidable result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Cavoidable</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Cavoidable get(int value)
+  {
+    switch (value)
+    {
+      case INCONSISTENCY_VALUE: return INCONSISTENCY;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Cavoidable(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Cavoidable
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Cmitigation.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Cmitigation.java
new file mode 100644
index 0000000..cbcadf1
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Cmitigation.java
@@ -0,0 +1,283 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Cmitigation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getCmitigation()
+ * @model
+ * @generated
+ */
+public enum Cmitigation implements Enumerator
+{
+  /**
+   * The '<em><b>FULL CONSISTENCY</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #FULL_CONSISTENCY_VALUE
+   * @generated
+   * @ordered
+   */
+  FULL_CONSISTENCY(0, "FULL_CONSISTENCY", "full_consistency"),
+
+  /**
+   * The '<em><b>RANGE VIOLATION ALLOWED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #RANGE_VIOLATION_ALLOWED_VALUE
+   * @generated
+   * @ordered
+   */
+  RANGE_VIOLATION_ALLOWED(1, "RANGE_VIOLATION_ALLOWED", "range_violation_allowed"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(2, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(3, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>FULL CONSISTENCY</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>FULL CONSISTENCY</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #FULL_CONSISTENCY
+   * @model literal="full_consistency"
+   * @generated
+   * @ordered
+   */
+  public static final int FULL_CONSISTENCY_VALUE = 0;
+
+  /**
+   * The '<em><b>RANGE VIOLATION ALLOWED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>RANGE VIOLATION ALLOWED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #RANGE_VIOLATION_ALLOWED
+   * @model literal="range_violation_allowed"
+   * @generated
+   * @ordered
+   */
+  public static final int RANGE_VIOLATION_ALLOWED_VALUE = 1;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 2;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 3;
+
+  /**
+   * An array of all the '<em><b>Cmitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Cmitigation[] VALUES_ARRAY =
+    new Cmitigation[]
+    {
+      FULL_CONSISTENCY,
+      RANGE_VIOLATION_ALLOWED,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Cmitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Cmitigation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Cmitigation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Cmitigation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Cmitigation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Cmitigation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Cmitigation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Cmitigation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Cmitigation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Cmitigation get(int value)
+  {
+    switch (value)
+    {
+      case FULL_CONSISTENCY_VALUE: return FULL_CONSISTENCY;
+      case RANGE_VIOLATION_ALLOWED_VALUE: return RANGE_VIOLATION_ALLOWED;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Cmitigation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Cmitigation
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ComplexNofailureDefinition.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ComplexNofailureDefinition.java
new file mode 100644
index 0000000..57a48b6
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/ComplexNofailureDefinition.java
@@ -0,0 +1,18 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Complex Nofailure Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getComplexNofailureDefinition()
+ * @model
+ * @generated
+ */
+public interface ComplexNofailureDefinition extends Definitions
+{
+} // ComplexNofailureDefinition
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Davoidable.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Davoidable.java
new file mode 100644
index 0000000..f1c3681
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Davoidable.java
@@ -0,0 +1,256 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Davoidable</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getDavoidable()
+ * @model
+ * @generated
+ */
+public enum Davoidable implements Enumerator
+{
+  /**
+   * The '<em><b>IMPERMANENCE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #IMPERMANENCE_VALUE
+   * @generated
+   * @ordered
+   */
+  IMPERMANENCE(0, "IMPERMANENCE", "impermanence"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(1, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(2, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>IMPERMANENCE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>IMPERMANENCE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #IMPERMANENCE
+   * @model literal="impermanence"
+   * @generated
+   * @ordered
+   */
+  public static final int IMPERMANENCE_VALUE = 0;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 1;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 2;
+
+  /**
+   * An array of all the '<em><b>Davoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Davoidable[] VALUES_ARRAY =
+    new Davoidable[]
+    {
+      IMPERMANENCE,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Davoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Davoidable> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Davoidable</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Davoidable get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Davoidable result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Davoidable</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Davoidable getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Davoidable result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Davoidable</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Davoidable get(int value)
+  {
+    switch (value)
+    {
+      case IMPERMANENCE_VALUE: return IMPERMANENCE;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Davoidable(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Davoidable
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Definitions.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Definitions.java
new file mode 100644
index 0000000..39823de
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Definitions.java
@@ -0,0 +1,19 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Definitions</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getDefinitions()
+ * @model
+ * @generated
+ */
+public interface Definitions extends EObject
+{
+} // Definitions
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Dmitigation.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Dmitigation.java
new file mode 100644
index 0000000..677e27b
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Dmitigation.java
@@ -0,0 +1,283 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Dmitigation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getDmitigation()
+ * @model
+ * @generated
+ */
+public enum Dmitigation implements Enumerator
+{
+  /**
+   * The '<em><b>NO LOSS</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NO_LOSS_VALUE
+   * @generated
+   * @ordered
+   */
+  NO_LOSS(0, "NO_LOSS", "no_loss"),
+
+  /**
+   * The '<em><b>PARTIAL LOSS ALLOWED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #PARTIAL_LOSS_ALLOWED_VALUE
+   * @generated
+   * @ordered
+   */
+  PARTIAL_LOSS_ALLOWED(1, "PARTIAL_LOSS_ALLOWED", "partial_loss_allowed"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(2, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(3, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>NO LOSS</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NO LOSS</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NO_LOSS
+   * @model literal="no_loss"
+   * @generated
+   * @ordered
+   */
+  public static final int NO_LOSS_VALUE = 0;
+
+  /**
+   * The '<em><b>PARTIAL LOSS ALLOWED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>PARTIAL LOSS ALLOWED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #PARTIAL_LOSS_ALLOWED
+   * @model literal="partial_loss_allowed"
+   * @generated
+   * @ordered
+   */
+  public static final int PARTIAL_LOSS_ALLOWED_VALUE = 1;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 2;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 3;
+
+  /**
+   * An array of all the '<em><b>Dmitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Dmitigation[] VALUES_ARRAY =
+    new Dmitigation[]
+    {
+      NO_LOSS,
+      PARTIAL_LOSS_ALLOWED,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Dmitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Dmitigation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Dmitigation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Dmitigation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Dmitigation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Dmitigation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Dmitigation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Dmitigation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Dmitigation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Dmitigation get(int value)
+  {
+    switch (value)
+    {
+      case NO_LOSS_VALUE: return NO_LOSS;
+      case PARTIAL_LOSS_ALLOWED_VALUE: return PARTIAL_LOSS_ALLOWED;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Dmitigation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Dmitigation
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Expression.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Expression.java
new file mode 100644
index 0000000..57bdeb1
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Expression.java
@@ -0,0 +1,78 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.Expression#getLhs <em>Lhs</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.Expression#getRhs <em>Rhs</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getExpression()
+ * @model
+ * @generated
+ */
+public interface Expression extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Lhs</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Lhs</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Lhs</em>' containment reference.
+   * @see #setLhs(Lhs)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getExpression_Lhs()
+   * @model containment="true"
+   * @generated
+   */
+  Lhs getLhs();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.Expression#getLhs <em>Lhs</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Lhs</em>' containment reference.
+   * @see #getLhs()
+   * @generated
+   */
+  void setLhs(Lhs value);
+
+  /**
+   * Returns the value of the '<em><b>Rhs</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rhs</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rhs</em>' containment reference.
+   * @see #setRhs(Rhs)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getExpression_Rhs()
+   * @model containment="true"
+   * @generated
+   */
+  Rhs getRhs();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.Expression#getRhs <em>Rhs</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rhs</em>' containment reference.
+   * @see #getRhs()
+   * @generated
+   */
+  void setRhs(Rhs value);
+
+} // Expression
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FailureDefinition.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FailureDefinition.java
new file mode 100644
index 0000000..e354da3
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FailureDefinition.java
@@ -0,0 +1,80 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Failure Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition#getType <em>Type</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition#getAcidAvoidable <em>Acid Avoidable</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getFailureDefinition()
+ * @model
+ * @generated
+ */
+public interface FailureDefinition extends Definitions
+{
+  /**
+   * Returns the value of the '<em><b>Type</b></em>' attribute.
+   * The literals are from the enumeration {@link org.polarsys.chess.xtext.flaDsl.FailureType}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Type</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureType
+   * @see #setType(FailureType)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getFailureDefinition_Type()
+   * @model
+   * @generated
+   */
+  FailureType getType();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition#getType <em>Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type</em>' attribute.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureType
+   * @see #getType()
+   * @generated
+   */
+  void setType(FailureType value);
+
+  /**
+   * Returns the value of the '<em><b>Acid Avoidable</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Acid Avoidable</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Acid Avoidable</em>' containment reference.
+   * @see #setAcidAvoidable(ACIDavoidable)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getFailureDefinition_AcidAvoidable()
+   * @model containment="true"
+   * @generated
+   */
+  ACIDavoidable getAcidAvoidable();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition#getAcidAvoidable <em>Acid Avoidable</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Acid Avoidable</em>' containment reference.
+   * @see #getAcidAvoidable()
+   * @generated
+   */
+  void setAcidAvoidable(ACIDavoidable value);
+
+} // FailureDefinition
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FailureType.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FailureType.java
new file mode 100644
index 0000000..ef396b2
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FailureType.java
@@ -0,0 +1,418 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Failure Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getFailureType()
+ * @model
+ * @generated
+ */
+public enum FailureType implements Enumerator
+{
+  /**
+   * The '<em><b>NO FAILURE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NO_FAILURE_VALUE
+   * @generated
+   * @ordered
+   */
+  NO_FAILURE(0, "NO_FAILURE", "noFailure"),
+
+  /**
+   * The '<em><b>EARLY</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #EARLY_VALUE
+   * @generated
+   * @ordered
+   */
+  EARLY(1, "EARLY", "early"),
+
+  /**
+   * The '<em><b>LATE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #LATE_VALUE
+   * @generated
+   * @ordered
+   */
+  LATE(2, "LATE", "late"),
+
+  /**
+   * The '<em><b>COMMISSION</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #COMMISSION_VALUE
+   * @generated
+   * @ordered
+   */
+  COMMISSION(3, "COMMISSION", "commission"),
+
+  /**
+   * The '<em><b>OMISSION</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #OMISSION_VALUE
+   * @generated
+   * @ordered
+   */
+  OMISSION(4, "OMISSION", "omission"),
+
+  /**
+   * The '<em><b>VALUE SUBTLE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #VALUE_SUBTLE_VALUE
+   * @generated
+   * @ordered
+   */
+  VALUE_SUBTLE(5, "VALUE_SUBTLE", "valueSubtle"),
+
+  /**
+   * The '<em><b>VALUE COARSE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #VALUE_COARSE_VALUE
+   * @generated
+   * @ordered
+   */
+  VALUE_COARSE(6, "VALUE_COARSE", "valueCoarse"),
+
+  /**
+   * The '<em><b>WILDCARD</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #WILDCARD_VALUE
+   * @generated
+   * @ordered
+   */
+  WILDCARD(7, "WILDCARD", "wildcard"),
+
+  /**
+   * The '<em><b>VARIABLE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #VARIABLE_VALUE
+   * @generated
+   * @ordered
+   */
+  VARIABLE(8, "VARIABLE", "variable");
+
+  /**
+   * The '<em><b>NO FAILURE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NO FAILURE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NO_FAILURE
+   * @model literal="noFailure"
+   * @generated
+   * @ordered
+   */
+  public static final int NO_FAILURE_VALUE = 0;
+
+  /**
+   * The '<em><b>EARLY</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>EARLY</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #EARLY
+   * @model literal="early"
+   * @generated
+   * @ordered
+   */
+  public static final int EARLY_VALUE = 1;
+
+  /**
+   * The '<em><b>LATE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>LATE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #LATE
+   * @model literal="late"
+   * @generated
+   * @ordered
+   */
+  public static final int LATE_VALUE = 2;
+
+  /**
+   * The '<em><b>COMMISSION</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>COMMISSION</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #COMMISSION
+   * @model literal="commission"
+   * @generated
+   * @ordered
+   */
+  public static final int COMMISSION_VALUE = 3;
+
+  /**
+   * The '<em><b>OMISSION</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>OMISSION</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #OMISSION
+   * @model literal="omission"
+   * @generated
+   * @ordered
+   */
+  public static final int OMISSION_VALUE = 4;
+
+  /**
+   * The '<em><b>VALUE SUBTLE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>VALUE SUBTLE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #VALUE_SUBTLE
+   * @model literal="valueSubtle"
+   * @generated
+   * @ordered
+   */
+  public static final int VALUE_SUBTLE_VALUE = 5;
+
+  /**
+   * The '<em><b>VALUE COARSE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>VALUE COARSE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #VALUE_COARSE
+   * @model literal="valueCoarse"
+   * @generated
+   * @ordered
+   */
+  public static final int VALUE_COARSE_VALUE = 6;
+
+  /**
+   * The '<em><b>WILDCARD</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>WILDCARD</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #WILDCARD
+   * @model literal="wildcard"
+   * @generated
+   * @ordered
+   */
+  public static final int WILDCARD_VALUE = 7;
+
+  /**
+   * The '<em><b>VARIABLE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>VARIABLE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #VARIABLE
+   * @model literal="variable"
+   * @generated
+   * @ordered
+   */
+  public static final int VARIABLE_VALUE = 8;
+
+  /**
+   * An array of all the '<em><b>Failure Type</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final FailureType[] VALUES_ARRAY =
+    new FailureType[]
+    {
+      NO_FAILURE,
+      EARLY,
+      LATE,
+      COMMISSION,
+      OMISSION,
+      VALUE_SUBTLE,
+      VALUE_COARSE,
+      WILDCARD,
+      VARIABLE,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Failure Type</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<FailureType> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Failure Type</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static FailureType get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      FailureType result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Failure Type</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static FailureType getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      FailureType result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Failure Type</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static FailureType get(int value)
+  {
+    switch (value)
+    {
+      case NO_FAILURE_VALUE: return NO_FAILURE;
+      case EARLY_VALUE: return EARLY;
+      case LATE_VALUE: return LATE;
+      case COMMISSION_VALUE: return COMMISSION;
+      case OMISSION_VALUE: return OMISSION;
+      case VALUE_SUBTLE_VALUE: return VALUE_SUBTLE;
+      case VALUE_COARSE_VALUE: return VALUE_COARSE;
+      case WILDCARD_VALUE: return WILDCARD;
+      case VARIABLE_VALUE: return VARIABLE;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private FailureType(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //FailureType
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FlaDslFactory.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FlaDslFactory.java
new file mode 100644
index 0000000..1bade94
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FlaDslFactory.java
@@ -0,0 +1,178 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage
+ * @generated
+ */
+public interface FlaDslFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  FlaDslFactory eINSTANCE = org.polarsys.chess.xtext.flaDsl.impl.FlaDslFactoryImpl.init();
+
+  /**
+   * Returns a new object of class '<em>Behaviour</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Behaviour</em>'.
+   * @generated
+   */
+  Behaviour createBehaviour();
+
+  /**
+   * Returns a new object of class '<em>Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Expression</em>'.
+   * @generated
+   */
+  Expression createExpression();
+
+  /**
+   * Returns a new object of class '<em>Lhs</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Lhs</em>'.
+   * @generated
+   */
+  Lhs createLhs();
+
+  /**
+   * Returns a new object of class '<em>Rhs</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Rhs</em>'.
+   * @generated
+   */
+  Rhs createRhs();
+
+  /**
+   * Returns a new object of class '<em>Input Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Input Expression</em>'.
+   * @generated
+   */
+  InputExpression createInputExpression();
+
+  /**
+   * Returns a new object of class '<em>Output Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Output Expression</em>'.
+   * @generated
+   */
+  OutputExpression createOutputExpression();
+
+  /**
+   * Returns a new object of class '<em>In Failure Expr</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>In Failure Expr</em>'.
+   * @generated
+   */
+  InFailureExpr createInFailureExpr();
+
+  /**
+   * Returns a new object of class '<em>Out Failure Expr</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Out Failure Expr</em>'.
+   * @generated
+   */
+  OutFailureExpr createOutFailureExpr();
+
+  /**
+   * Returns a new object of class '<em>Definitions</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Definitions</em>'.
+   * @generated
+   */
+  Definitions createDefinitions();
+
+  /**
+   * Returns a new object of class '<em>Failure Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Failure Definition</em>'.
+   * @generated
+   */
+  FailureDefinition createFailureDefinition();
+
+  /**
+   * Returns a new object of class '<em>No Failure Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>No Failure Definition</em>'.
+   * @generated
+   */
+  NoFailureDefinition createNoFailureDefinition();
+
+  /**
+   * Returns a new object of class '<em>Complex Nofailure Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Complex Nofailure Definition</em>'.
+   * @generated
+   */
+  ComplexNofailureDefinition createComplexNofailureDefinition();
+
+  /**
+   * Returns a new object of class '<em>Wildcard Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Wildcard Definition</em>'.
+   * @generated
+   */
+  WildcardDefinition createWildcardDefinition();
+
+  /**
+   * Returns a new object of class '<em>Variable Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Variable Definition</em>'.
+   * @generated
+   */
+  VariableDefinition createVariableDefinition();
+
+  /**
+   * Returns a new object of class '<em>ACI Davoidable</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>ACI Davoidable</em>'.
+   * @generated
+   */
+  ACIDavoidable createACIDavoidable();
+
+  /**
+   * Returns a new object of class '<em>ACID Mitigation</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>ACID Mitigation</em>'.
+   * @generated
+   */
+  ACIDMitigation createACIDMitigation();
+
+  /**
+   * Returns the package supported by this factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the package supported by this factory.
+   * @generated
+   */
+  FlaDslPackage getFlaDslPackage();
+
+} //FlaDslFactory
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FlaDslPackage.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FlaDslPackage.java
new file mode 100644
index 0000000..c65a5e3
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/FlaDslPackage.java
@@ -0,0 +1,1624 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface FlaDslPackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "flaDsl";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://www.intecs.org/chess/xtext/FlaDsl";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "flaDsl";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  FlaDslPackage eINSTANCE = org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.BehaviourImpl <em>Behaviour</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.BehaviourImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getBehaviour()
+   * @generated
+   */
+  int BEHAVIOUR = 0;
+
+  /**
+   * The feature id for the '<em><b>Rules</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BEHAVIOUR__RULES = 0;
+
+  /**
+   * The number of structural features of the '<em>Behaviour</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BEHAVIOUR_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ExpressionImpl <em>Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.ExpressionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getExpression()
+   * @generated
+   */
+  int EXPRESSION = 1;
+
+  /**
+   * The feature id for the '<em><b>Lhs</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXPRESSION__LHS = 0;
+
+  /**
+   * The feature id for the '<em><b>Rhs</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXPRESSION__RHS = 1;
+
+  /**
+   * The number of structural features of the '<em>Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXPRESSION_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.LhsImpl <em>Lhs</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.LhsImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getLhs()
+   * @generated
+   */
+  int LHS = 2;
+
+  /**
+   * The feature id for the '<em><b>Failures</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int LHS__FAILURES = 0;
+
+  /**
+   * The number of structural features of the '<em>Lhs</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int LHS_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.RhsImpl <em>Rhs</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.RhsImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getRhs()
+   * @generated
+   */
+  int RHS = 3;
+
+  /**
+   * The feature id for the '<em><b>Failures</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RHS__FAILURES = 0;
+
+  /**
+   * The number of structural features of the '<em>Rhs</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RHS_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.InputExpressionImpl <em>Input Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.InputExpressionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getInputExpression()
+   * @generated
+   */
+  int INPUT_EXPRESSION = 4;
+
+  /**
+   * The feature id for the '<em><b>Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INPUT_EXPRESSION__REF = 0;
+
+  /**
+   * The feature id for the '<em><b>Failure Expr</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INPUT_EXPRESSION__FAILURE_EXPR = 1;
+
+  /**
+   * The number of structural features of the '<em>Input Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INPUT_EXPRESSION_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.OutputExpressionImpl <em>Output Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.OutputExpressionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getOutputExpression()
+   * @generated
+   */
+  int OUTPUT_EXPRESSION = 5;
+
+  /**
+   * The feature id for the '<em><b>Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OUTPUT_EXPRESSION__REF = 0;
+
+  /**
+   * The feature id for the '<em><b>Failure Expr</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OUTPUT_EXPRESSION__FAILURE_EXPR = 1;
+
+  /**
+   * The number of structural features of the '<em>Output Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OUTPUT_EXPRESSION_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.InFailureExprImpl <em>In Failure Expr</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.InFailureExprImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getInFailureExpr()
+   * @generated
+   */
+  int IN_FAILURE_EXPR = 6;
+
+  /**
+   * The feature id for the '<em><b>Failures</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IN_FAILURE_EXPR__FAILURES = 0;
+
+  /**
+   * The number of structural features of the '<em>In Failure Expr</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IN_FAILURE_EXPR_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.OutFailureExprImpl <em>Out Failure Expr</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.OutFailureExprImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getOutFailureExpr()
+   * @generated
+   */
+  int OUT_FAILURE_EXPR = 7;
+
+  /**
+   * The feature id for the '<em><b>Failures</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OUT_FAILURE_EXPR__FAILURES = 0;
+
+  /**
+   * The number of structural features of the '<em>Out Failure Expr</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OUT_FAILURE_EXPR_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.DefinitionsImpl <em>Definitions</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.DefinitionsImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getDefinitions()
+   * @generated
+   */
+  int DEFINITIONS = 8;
+
+  /**
+   * The number of structural features of the '<em>Definitions</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DEFINITIONS_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.FailureDefinitionImpl <em>Failure Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FailureDefinitionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getFailureDefinition()
+   * @generated
+   */
+  int FAILURE_DEFINITION = 9;
+
+  /**
+   * The feature id for the '<em><b>Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FAILURE_DEFINITION__TYPE = DEFINITIONS_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Acid Avoidable</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FAILURE_DEFINITION__ACID_AVOIDABLE = DEFINITIONS_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Failure Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FAILURE_DEFINITION_FEATURE_COUNT = DEFINITIONS_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.NoFailureDefinitionImpl <em>No Failure Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.NoFailureDefinitionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getNoFailureDefinition()
+   * @generated
+   */
+  int NO_FAILURE_DEFINITION = 10;
+
+  /**
+   * The feature id for the '<em><b>Acid Mitigation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int NO_FAILURE_DEFINITION__ACID_MITIGATION = DEFINITIONS_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>No Failure Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int NO_FAILURE_DEFINITION_FEATURE_COUNT = DEFINITIONS_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ComplexNofailureDefinitionImpl <em>Complex Nofailure Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.ComplexNofailureDefinitionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getComplexNofailureDefinition()
+   * @generated
+   */
+  int COMPLEX_NOFAILURE_DEFINITION = 11;
+
+  /**
+   * The number of structural features of the '<em>Complex Nofailure Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPLEX_NOFAILURE_DEFINITION_FEATURE_COUNT = DEFINITIONS_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.WildcardDefinitionImpl <em>Wildcard Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.WildcardDefinitionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getWildcardDefinition()
+   * @generated
+   */
+  int WILDCARD_DEFINITION = 12;
+
+  /**
+   * The number of structural features of the '<em>Wildcard Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WILDCARD_DEFINITION_FEATURE_COUNT = DEFINITIONS_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.VariableDefinitionImpl <em>Variable Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.VariableDefinitionImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getVariableDefinition()
+   * @generated
+   */
+  int VARIABLE_DEFINITION = 13;
+
+  /**
+   * The feature id for the '<em><b>Variable Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int VARIABLE_DEFINITION__VARIABLE_NAME = DEFINITIONS_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Variable Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int VARIABLE_DEFINITION_FEATURE_COUNT = DEFINITIONS_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl <em>ACI Davoidable</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getACIDavoidable()
+   * @generated
+   */
+  int ACI_DAVOIDABLE = 14;
+
+  /**
+   * The feature id for the '<em><b>A</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACI_DAVOIDABLE__A = 0;
+
+  /**
+   * The feature id for the '<em><b>C</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACI_DAVOIDABLE__C = 1;
+
+  /**
+   * The feature id for the '<em><b>I</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACI_DAVOIDABLE__I = 2;
+
+  /**
+   * The feature id for the '<em><b>D</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACI_DAVOIDABLE__D = 3;
+
+  /**
+   * The number of structural features of the '<em>ACI Davoidable</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACI_DAVOIDABLE_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl <em>ACID Mitigation</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getACIDMitigation()
+   * @generated
+   */
+  int ACID_MITIGATION = 15;
+
+  /**
+   * The feature id for the '<em><b>A</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACID_MITIGATION__A = 0;
+
+  /**
+   * The feature id for the '<em><b>C</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACID_MITIGATION__C = 1;
+
+  /**
+   * The feature id for the '<em><b>I</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACID_MITIGATION__I = 2;
+
+  /**
+   * The feature id for the '<em><b>D</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACID_MITIGATION__D = 3;
+
+  /**
+   * The number of structural features of the '<em>ACID Mitigation</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ACID_MITIGATION_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.FailureType <em>Failure Type</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.FailureType
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getFailureType()
+   * @generated
+   */
+  int FAILURE_TYPE = 16;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Aavoidable <em>Aavoidable</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Aavoidable
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getAavoidable()
+   * @generated
+   */
+  int AAVOIDABLE = 17;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Cavoidable <em>Cavoidable</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Cavoidable
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getCavoidable()
+   * @generated
+   */
+  int CAVOIDABLE = 18;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Iavoidable <em>Iavoidable</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Iavoidable
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getIavoidable()
+   * @generated
+   */
+  int IAVOIDABLE = 19;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Davoidable <em>Davoidable</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Davoidable
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getDavoidable()
+   * @generated
+   */
+  int DAVOIDABLE = 20;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Amitigation <em>Amitigation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Amitigation
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getAmitigation()
+   * @generated
+   */
+  int AMITIGATION = 21;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Cmitigation <em>Cmitigation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Cmitigation
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getCmitigation()
+   * @generated
+   */
+  int CMITIGATION = 22;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Imitigation <em>Imitigation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Imitigation
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getImitigation()
+   * @generated
+   */
+  int IMITIGATION = 23;
+
+  /**
+   * The meta object id for the '{@link org.polarsys.chess.xtext.flaDsl.Dmitigation <em>Dmitigation</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.polarsys.chess.xtext.flaDsl.Dmitigation
+   * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getDmitigation()
+   * @generated
+   */
+  int DMITIGATION = 24;
+
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.Behaviour <em>Behaviour</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Behaviour</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Behaviour
+   * @generated
+   */
+  EClass getBehaviour();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.polarsys.chess.xtext.flaDsl.Behaviour#getRules <em>Rules</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Rules</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Behaviour#getRules()
+   * @see #getBehaviour()
+   * @generated
+   */
+  EReference getBehaviour_Rules();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.Expression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Expression</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Expression
+   * @generated
+   */
+  EClass getExpression();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.polarsys.chess.xtext.flaDsl.Expression#getLhs <em>Lhs</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Lhs</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Expression#getLhs()
+   * @see #getExpression()
+   * @generated
+   */
+  EReference getExpression_Lhs();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.polarsys.chess.xtext.flaDsl.Expression#getRhs <em>Rhs</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Rhs</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Expression#getRhs()
+   * @see #getExpression()
+   * @generated
+   */
+  EReference getExpression_Rhs();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.Lhs <em>Lhs</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Lhs</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Lhs
+   * @generated
+   */
+  EClass getLhs();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.polarsys.chess.xtext.flaDsl.Lhs#getFailures <em>Failures</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Failures</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Lhs#getFailures()
+   * @see #getLhs()
+   * @generated
+   */
+  EReference getLhs_Failures();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.Rhs <em>Rhs</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Rhs</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Rhs
+   * @generated
+   */
+  EClass getRhs();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.polarsys.chess.xtext.flaDsl.Rhs#getFailures <em>Failures</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Failures</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Rhs#getFailures()
+   * @see #getRhs()
+   * @generated
+   */
+  EReference getRhs_Failures();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.InputExpression <em>Input Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Input Expression</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.InputExpression
+   * @generated
+   */
+  EClass getInputExpression();
+
+  /**
+   * Returns the meta object for the reference '{@link org.polarsys.chess.xtext.flaDsl.InputExpression#getRef <em>Ref</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Ref</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.InputExpression#getRef()
+   * @see #getInputExpression()
+   * @generated
+   */
+  EReference getInputExpression_Ref();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.polarsys.chess.xtext.flaDsl.InputExpression#getFailureExpr <em>Failure Expr</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Failure Expr</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.InputExpression#getFailureExpr()
+   * @see #getInputExpression()
+   * @generated
+   */
+  EReference getInputExpression_FailureExpr();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.OutputExpression <em>Output Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Output Expression</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.OutputExpression
+   * @generated
+   */
+  EClass getOutputExpression();
+
+  /**
+   * Returns the meta object for the reference '{@link org.polarsys.chess.xtext.flaDsl.OutputExpression#getRef <em>Ref</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Ref</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.OutputExpression#getRef()
+   * @see #getOutputExpression()
+   * @generated
+   */
+  EReference getOutputExpression_Ref();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.polarsys.chess.xtext.flaDsl.OutputExpression#getFailureExpr <em>Failure Expr</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Failure Expr</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.OutputExpression#getFailureExpr()
+   * @see #getOutputExpression()
+   * @generated
+   */
+  EReference getOutputExpression_FailureExpr();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.InFailureExpr <em>In Failure Expr</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>In Failure Expr</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.InFailureExpr
+   * @generated
+   */
+  EClass getInFailureExpr();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.polarsys.chess.xtext.flaDsl.InFailureExpr#getFailures <em>Failures</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Failures</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.InFailureExpr#getFailures()
+   * @see #getInFailureExpr()
+   * @generated
+   */
+  EReference getInFailureExpr_Failures();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.OutFailureExpr <em>Out Failure Expr</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Out Failure Expr</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.OutFailureExpr
+   * @generated
+   */
+  EClass getOutFailureExpr();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.polarsys.chess.xtext.flaDsl.OutFailureExpr#getFailures <em>Failures</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Failures</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.OutFailureExpr#getFailures()
+   * @see #getOutFailureExpr()
+   * @generated
+   */
+  EReference getOutFailureExpr_Failures();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.Definitions <em>Definitions</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Definitions</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Definitions
+   * @generated
+   */
+  EClass getDefinitions();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition <em>Failure Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Failure Definition</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureDefinition
+   * @generated
+   */
+  EClass getFailureDefinition();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition#getType <em>Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Type</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureDefinition#getType()
+   * @see #getFailureDefinition()
+   * @generated
+   */
+  EAttribute getFailureDefinition_Type();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition#getAcidAvoidable <em>Acid Avoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Acid Avoidable</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureDefinition#getAcidAvoidable()
+   * @see #getFailureDefinition()
+   * @generated
+   */
+  EReference getFailureDefinition_AcidAvoidable();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.NoFailureDefinition <em>No Failure Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>No Failure Definition</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.NoFailureDefinition
+   * @generated
+   */
+  EClass getNoFailureDefinition();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.polarsys.chess.xtext.flaDsl.NoFailureDefinition#getAcidMitigation <em>Acid Mitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Acid Mitigation</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.NoFailureDefinition#getAcidMitigation()
+   * @see #getNoFailureDefinition()
+   * @generated
+   */
+  EReference getNoFailureDefinition_AcidMitigation();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.ComplexNofailureDefinition <em>Complex Nofailure Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Complex Nofailure Definition</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ComplexNofailureDefinition
+   * @generated
+   */
+  EClass getComplexNofailureDefinition();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.WildcardDefinition <em>Wildcard Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Wildcard Definition</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.WildcardDefinition
+   * @generated
+   */
+  EClass getWildcardDefinition();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.VariableDefinition <em>Variable Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Variable Definition</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.VariableDefinition
+   * @generated
+   */
+  EClass getVariableDefinition();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.VariableDefinition#getVariableName <em>Variable Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Variable Name</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.VariableDefinition#getVariableName()
+   * @see #getVariableDefinition()
+   * @generated
+   */
+  EAttribute getVariableDefinition_VariableName();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable <em>ACI Davoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>ACI Davoidable</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDavoidable
+   * @generated
+   */
+  EClass getACIDavoidable();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getA <em>A</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>A</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getA()
+   * @see #getACIDavoidable()
+   * @generated
+   */
+  EAttribute getACIDavoidable_A();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getC <em>C</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>C</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getC()
+   * @see #getACIDavoidable()
+   * @generated
+   */
+  EAttribute getACIDavoidable_C();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getI <em>I</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>I</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getI()
+   * @see #getACIDavoidable()
+   * @generated
+   */
+  EAttribute getACIDavoidable_I();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getD <em>D</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>D</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDavoidable#getD()
+   * @see #getACIDavoidable()
+   * @generated
+   */
+  EAttribute getACIDavoidable_D();
+
+  /**
+   * Returns the meta object for class '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation <em>ACID Mitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>ACID Mitigation</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDMitigation
+   * @generated
+   */
+  EClass getACIDMitigation();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getA <em>A</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>A</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getA()
+   * @see #getACIDMitigation()
+   * @generated
+   */
+  EAttribute getACIDMitigation_A();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getC <em>C</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>C</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getC()
+   * @see #getACIDMitigation()
+   * @generated
+   */
+  EAttribute getACIDMitigation_C();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getI <em>I</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>I</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getI()
+   * @see #getACIDMitigation()
+   * @generated
+   */
+  EAttribute getACIDMitigation_I();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getD <em>D</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>D</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDMitigation#getD()
+   * @see #getACIDMitigation()
+   * @generated
+   */
+  EAttribute getACIDMitigation_D();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.FailureType <em>Failure Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Failure Type</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureType
+   * @generated
+   */
+  EEnum getFailureType();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Aavoidable <em>Aavoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Aavoidable</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Aavoidable
+   * @generated
+   */
+  EEnum getAavoidable();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Cavoidable <em>Cavoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Cavoidable</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Cavoidable
+   * @generated
+   */
+  EEnum getCavoidable();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Iavoidable <em>Iavoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Iavoidable</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Iavoidable
+   * @generated
+   */
+  EEnum getIavoidable();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Davoidable <em>Davoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Davoidable</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Davoidable
+   * @generated
+   */
+  EEnum getDavoidable();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Amitigation <em>Amitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Amitigation</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Amitigation
+   * @generated
+   */
+  EEnum getAmitigation();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Cmitigation <em>Cmitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Cmitigation</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Cmitigation
+   * @generated
+   */
+  EEnum getCmitigation();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Imitigation <em>Imitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Imitigation</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Imitigation
+   * @generated
+   */
+  EEnum getImitigation();
+
+  /**
+   * Returns the meta object for enum '{@link org.polarsys.chess.xtext.flaDsl.Dmitigation <em>Dmitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Dmitigation</em>'.
+   * @see org.polarsys.chess.xtext.flaDsl.Dmitigation
+   * @generated
+   */
+  EEnum getDmitigation();
+
+  /**
+   * Returns the factory that creates the instances of the model.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the factory that creates the instances of the model.
+   * @generated
+   */
+  FlaDslFactory getFlaDslFactory();
+
+  /**
+   * <!-- begin-user-doc -->
+   * Defines literals for the meta objects that represent
+   * <ul>
+   *   <li>each class,</li>
+   *   <li>each feature of each class,</li>
+   *   <li>each enum,</li>
+   *   <li>and each data type</li>
+   * </ul>
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  interface Literals
+  {
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.BehaviourImpl <em>Behaviour</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.BehaviourImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getBehaviour()
+     * @generated
+     */
+    EClass BEHAVIOUR = eINSTANCE.getBehaviour();
+
+    /**
+     * The meta object literal for the '<em><b>Rules</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BEHAVIOUR__RULES = eINSTANCE.getBehaviour_Rules();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ExpressionImpl <em>Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.ExpressionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getExpression()
+     * @generated
+     */
+    EClass EXPRESSION = eINSTANCE.getExpression();
+
+    /**
+     * The meta object literal for the '<em><b>Lhs</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXPRESSION__LHS = eINSTANCE.getExpression_Lhs();
+
+    /**
+     * The meta object literal for the '<em><b>Rhs</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXPRESSION__RHS = eINSTANCE.getExpression_Rhs();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.LhsImpl <em>Lhs</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.LhsImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getLhs()
+     * @generated
+     */
+    EClass LHS = eINSTANCE.getLhs();
+
+    /**
+     * The meta object literal for the '<em><b>Failures</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference LHS__FAILURES = eINSTANCE.getLhs_Failures();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.RhsImpl <em>Rhs</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.RhsImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getRhs()
+     * @generated
+     */
+    EClass RHS = eINSTANCE.getRhs();
+
+    /**
+     * The meta object literal for the '<em><b>Failures</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference RHS__FAILURES = eINSTANCE.getRhs_Failures();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.InputExpressionImpl <em>Input Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.InputExpressionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getInputExpression()
+     * @generated
+     */
+    EClass INPUT_EXPRESSION = eINSTANCE.getInputExpression();
+
+    /**
+     * The meta object literal for the '<em><b>Ref</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference INPUT_EXPRESSION__REF = eINSTANCE.getInputExpression_Ref();
+
+    /**
+     * The meta object literal for the '<em><b>Failure Expr</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference INPUT_EXPRESSION__FAILURE_EXPR = eINSTANCE.getInputExpression_FailureExpr();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.OutputExpressionImpl <em>Output Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.OutputExpressionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getOutputExpression()
+     * @generated
+     */
+    EClass OUTPUT_EXPRESSION = eINSTANCE.getOutputExpression();
+
+    /**
+     * The meta object literal for the '<em><b>Ref</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference OUTPUT_EXPRESSION__REF = eINSTANCE.getOutputExpression_Ref();
+
+    /**
+     * The meta object literal for the '<em><b>Failure Expr</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference OUTPUT_EXPRESSION__FAILURE_EXPR = eINSTANCE.getOutputExpression_FailureExpr();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.InFailureExprImpl <em>In Failure Expr</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.InFailureExprImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getInFailureExpr()
+     * @generated
+     */
+    EClass IN_FAILURE_EXPR = eINSTANCE.getInFailureExpr();
+
+    /**
+     * The meta object literal for the '<em><b>Failures</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference IN_FAILURE_EXPR__FAILURES = eINSTANCE.getInFailureExpr_Failures();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.OutFailureExprImpl <em>Out Failure Expr</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.OutFailureExprImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getOutFailureExpr()
+     * @generated
+     */
+    EClass OUT_FAILURE_EXPR = eINSTANCE.getOutFailureExpr();
+
+    /**
+     * The meta object literal for the '<em><b>Failures</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference OUT_FAILURE_EXPR__FAILURES = eINSTANCE.getOutFailureExpr_Failures();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.DefinitionsImpl <em>Definitions</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.DefinitionsImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getDefinitions()
+     * @generated
+     */
+    EClass DEFINITIONS = eINSTANCE.getDefinitions();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.FailureDefinitionImpl <em>Failure Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FailureDefinitionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getFailureDefinition()
+     * @generated
+     */
+    EClass FAILURE_DEFINITION = eINSTANCE.getFailureDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute FAILURE_DEFINITION__TYPE = eINSTANCE.getFailureDefinition_Type();
+
+    /**
+     * The meta object literal for the '<em><b>Acid Avoidable</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FAILURE_DEFINITION__ACID_AVOIDABLE = eINSTANCE.getFailureDefinition_AcidAvoidable();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.NoFailureDefinitionImpl <em>No Failure Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.NoFailureDefinitionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getNoFailureDefinition()
+     * @generated
+     */
+    EClass NO_FAILURE_DEFINITION = eINSTANCE.getNoFailureDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Acid Mitigation</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference NO_FAILURE_DEFINITION__ACID_MITIGATION = eINSTANCE.getNoFailureDefinition_AcidMitigation();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ComplexNofailureDefinitionImpl <em>Complex Nofailure Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.ComplexNofailureDefinitionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getComplexNofailureDefinition()
+     * @generated
+     */
+    EClass COMPLEX_NOFAILURE_DEFINITION = eINSTANCE.getComplexNofailureDefinition();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.WildcardDefinitionImpl <em>Wildcard Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.WildcardDefinitionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getWildcardDefinition()
+     * @generated
+     */
+    EClass WILDCARD_DEFINITION = eINSTANCE.getWildcardDefinition();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.VariableDefinitionImpl <em>Variable Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.VariableDefinitionImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getVariableDefinition()
+     * @generated
+     */
+    EClass VARIABLE_DEFINITION = eINSTANCE.getVariableDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Variable Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute VARIABLE_DEFINITION__VARIABLE_NAME = eINSTANCE.getVariableDefinition_VariableName();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl <em>ACI Davoidable</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getACIDavoidable()
+     * @generated
+     */
+    EClass ACI_DAVOIDABLE = eINSTANCE.getACIDavoidable();
+
+    /**
+     * The meta object literal for the '<em><b>A</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACI_DAVOIDABLE__A = eINSTANCE.getACIDavoidable_A();
+
+    /**
+     * The meta object literal for the '<em><b>C</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACI_DAVOIDABLE__C = eINSTANCE.getACIDavoidable_C();
+
+    /**
+     * The meta object literal for the '<em><b>I</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACI_DAVOIDABLE__I = eINSTANCE.getACIDavoidable_I();
+
+    /**
+     * The meta object literal for the '<em><b>D</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACI_DAVOIDABLE__D = eINSTANCE.getACIDavoidable_D();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl <em>ACID Mitigation</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getACIDMitigation()
+     * @generated
+     */
+    EClass ACID_MITIGATION = eINSTANCE.getACIDMitigation();
+
+    /**
+     * The meta object literal for the '<em><b>A</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACID_MITIGATION__A = eINSTANCE.getACIDMitigation_A();
+
+    /**
+     * The meta object literal for the '<em><b>C</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACID_MITIGATION__C = eINSTANCE.getACIDMitigation_C();
+
+    /**
+     * The meta object literal for the '<em><b>I</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACID_MITIGATION__I = eINSTANCE.getACIDMitigation_I();
+
+    /**
+     * The meta object literal for the '<em><b>D</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ACID_MITIGATION__D = eINSTANCE.getACIDMitigation_D();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.FailureType <em>Failure Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.FailureType
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getFailureType()
+     * @generated
+     */
+    EEnum FAILURE_TYPE = eINSTANCE.getFailureType();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Aavoidable <em>Aavoidable</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Aavoidable
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getAavoidable()
+     * @generated
+     */
+    EEnum AAVOIDABLE = eINSTANCE.getAavoidable();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Cavoidable <em>Cavoidable</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Cavoidable
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getCavoidable()
+     * @generated
+     */
+    EEnum CAVOIDABLE = eINSTANCE.getCavoidable();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Iavoidable <em>Iavoidable</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Iavoidable
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getIavoidable()
+     * @generated
+     */
+    EEnum IAVOIDABLE = eINSTANCE.getIavoidable();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Davoidable <em>Davoidable</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Davoidable
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getDavoidable()
+     * @generated
+     */
+    EEnum DAVOIDABLE = eINSTANCE.getDavoidable();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Amitigation <em>Amitigation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Amitigation
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getAmitigation()
+     * @generated
+     */
+    EEnum AMITIGATION = eINSTANCE.getAmitigation();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Cmitigation <em>Cmitigation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Cmitigation
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getCmitigation()
+     * @generated
+     */
+    EEnum CMITIGATION = eINSTANCE.getCmitigation();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Imitigation <em>Imitigation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Imitigation
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getImitigation()
+     * @generated
+     */
+    EEnum IMITIGATION = eINSTANCE.getImitigation();
+
+    /**
+     * The meta object literal for the '{@link org.polarsys.chess.xtext.flaDsl.Dmitigation <em>Dmitigation</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.polarsys.chess.xtext.flaDsl.Dmitigation
+     * @see org.polarsys.chess.xtext.flaDsl.impl.FlaDslPackageImpl#getDmitigation()
+     * @generated
+     */
+    EEnum DMITIGATION = eINSTANCE.getDmitigation();
+
+  }
+
+} //FlaDslPackage
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Iavoidable.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Iavoidable.java
new file mode 100644
index 0000000..b9e242d
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Iavoidable.java
@@ -0,0 +1,256 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Iavoidable</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getIavoidable()
+ * @model
+ * @generated
+ */
+public enum Iavoidable implements Enumerator
+{
+  /**
+   * The '<em><b>INTERFERENCE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #INTERFERENCE_VALUE
+   * @generated
+   * @ordered
+   */
+  INTERFERENCE(0, "INTERFERENCE", "interference"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(1, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(2, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>INTERFERENCE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>INTERFERENCE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #INTERFERENCE
+   * @model literal="interference"
+   * @generated
+   * @ordered
+   */
+  public static final int INTERFERENCE_VALUE = 0;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 1;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 2;
+
+  /**
+   * An array of all the '<em><b>Iavoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Iavoidable[] VALUES_ARRAY =
+    new Iavoidable[]
+    {
+      INTERFERENCE,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Iavoidable</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Iavoidable> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Iavoidable</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Iavoidable get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Iavoidable result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Iavoidable</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Iavoidable getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Iavoidable result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Iavoidable</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Iavoidable get(int value)
+  {
+    switch (value)
+    {
+      case INTERFERENCE_VALUE: return INTERFERENCE;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Iavoidable(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Iavoidable
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Imitigation.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Imitigation.java
new file mode 100644
index 0000000..c918e48
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Imitigation.java
@@ -0,0 +1,283 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Imitigation</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getImitigation()
+ * @model
+ * @generated
+ */
+public enum Imitigation implements Enumerator
+{
+  /**
+   * The '<em><b>SERIALIZABLE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #SERIALIZABLE_VALUE
+   * @generated
+   * @ordered
+   */
+  SERIALIZABLE(0, "SERIALIZABLE", "serializable"),
+
+  /**
+   * The '<em><b>PORTABLE LEVEL</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #PORTABLE_LEVEL_VALUE
+   * @generated
+   * @ordered
+   */
+  PORTABLE_LEVEL(1, "PORTABLE_LEVEL", "portable_level"),
+
+  /**
+   * The '<em><b>NONE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #NONE_VALUE
+   * @generated
+   * @ordered
+   */
+  NONE(2, "NONE", "none"),
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED_VALUE
+   * @generated
+   * @ordered
+   */
+  UNSPECIFIED(3, "UNSPECIFIED", "unspecified");
+
+  /**
+   * The '<em><b>SERIALIZABLE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>SERIALIZABLE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #SERIALIZABLE
+   * @model literal="serializable"
+   * @generated
+   * @ordered
+   */
+  public static final int SERIALIZABLE_VALUE = 0;
+
+  /**
+   * The '<em><b>PORTABLE LEVEL</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>PORTABLE LEVEL</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #PORTABLE_LEVEL
+   * @model literal="portable_level"
+   * @generated
+   * @ordered
+   */
+  public static final int PORTABLE_LEVEL_VALUE = 1;
+
+  /**
+   * The '<em><b>NONE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>NONE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #NONE
+   * @model literal="none"
+   * @generated
+   * @ordered
+   */
+  public static final int NONE_VALUE = 2;
+
+  /**
+   * The '<em><b>UNSPECIFIED</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>UNSPECIFIED</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #UNSPECIFIED
+   * @model literal="unspecified"
+   * @generated
+   * @ordered
+   */
+  public static final int UNSPECIFIED_VALUE = 3;
+
+  /**
+   * An array of all the '<em><b>Imitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Imitigation[] VALUES_ARRAY =
+    new Imitigation[]
+    {
+      SERIALIZABLE,
+      PORTABLE_LEVEL,
+      NONE,
+      UNSPECIFIED,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Imitigation</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Imitigation> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Imitigation</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param literal the literal.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Imitigation get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Imitigation result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Imitigation</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param name the name.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Imitigation getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Imitigation result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Imitigation</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the integer value.
+   * @return the matching enumerator or <code>null</code>.
+   * @generated
+   */
+  public static Imitigation get(int value)
+  {
+    switch (value)
+    {
+      case SERIALIZABLE_VALUE: return SERIALIZABLE;
+      case PORTABLE_LEVEL_VALUE: return PORTABLE_LEVEL;
+      case NONE_VALUE: return NONE;
+      case UNSPECIFIED_VALUE: return UNSPECIFIED;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Imitigation(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+  
+} //Imitigation
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/InFailureExpr.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/InFailureExpr.java
new file mode 100644
index 0000000..cd9f793
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/InFailureExpr.java
@@ -0,0 +1,43 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>In Failure Expr</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.InFailureExpr#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getInFailureExpr()
+ * @model
+ * @generated
+ */
+public interface InFailureExpr extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Failures</b></em>' containment reference list.
+   * The list contents are of type {@link org.polarsys.chess.xtext.flaDsl.Definitions}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Failures</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Failures</em>' containment reference list.
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getInFailureExpr_Failures()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Definitions> getFailures();
+
+} // InFailureExpr
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/InputExpression.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/InputExpression.java
new file mode 100644
index 0000000..bc84614
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/InputExpression.java
@@ -0,0 +1,80 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Port;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Input Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.InputExpression#getRef <em>Ref</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.InputExpression#getFailureExpr <em>Failure Expr</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getInputExpression()
+ * @model
+ * @generated
+ */
+public interface InputExpression extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ref</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ref</em>' reference.
+   * @see #setRef(Port)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getInputExpression_Ref()
+   * @model
+   * @generated
+   */
+  Port getRef();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.InputExpression#getRef <em>Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ref</em>' reference.
+   * @see #getRef()
+   * @generated
+   */
+  void setRef(Port value);
+
+  /**
+   * Returns the value of the '<em><b>Failure Expr</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Failure Expr</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Failure Expr</em>' containment reference.
+   * @see #setFailureExpr(InFailureExpr)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getInputExpression_FailureExpr()
+   * @model containment="true"
+   * @generated
+   */
+  InFailureExpr getFailureExpr();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.InputExpression#getFailureExpr <em>Failure Expr</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Failure Expr</em>' containment reference.
+   * @see #getFailureExpr()
+   * @generated
+   */
+  void setFailureExpr(InFailureExpr value);
+
+} // InputExpression
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Lhs.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Lhs.java
new file mode 100644
index 0000000..2027474
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Lhs.java
@@ -0,0 +1,43 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Lhs</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.Lhs#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getLhs()
+ * @model
+ * @generated
+ */
+public interface Lhs extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Failures</b></em>' containment reference list.
+   * The list contents are of type {@link org.polarsys.chess.xtext.flaDsl.InputExpression}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Failures</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Failures</em>' containment reference list.
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getLhs_Failures()
+   * @model containment="true"
+   * @generated
+   */
+  EList<InputExpression> getFailures();
+
+} // Lhs
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/NoFailureDefinition.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/NoFailureDefinition.java
new file mode 100644
index 0000000..29095fd
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/NoFailureDefinition.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>No Failure Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.NoFailureDefinition#getAcidMitigation <em>Acid Mitigation</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getNoFailureDefinition()
+ * @model
+ * @generated
+ */
+public interface NoFailureDefinition extends Definitions, ComplexNofailureDefinition
+{
+  /**
+   * Returns the value of the '<em><b>Acid Mitigation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Acid Mitigation</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Acid Mitigation</em>' containment reference.
+   * @see #setAcidMitigation(ACIDMitigation)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getNoFailureDefinition_AcidMitigation()
+   * @model containment="true"
+   * @generated
+   */
+  ACIDMitigation getAcidMitigation();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.NoFailureDefinition#getAcidMitigation <em>Acid Mitigation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Acid Mitigation</em>' containment reference.
+   * @see #getAcidMitigation()
+   * @generated
+   */
+  void setAcidMitigation(ACIDMitigation value);
+
+} // NoFailureDefinition
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/OutFailureExpr.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/OutFailureExpr.java
new file mode 100644
index 0000000..ed776c6
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/OutFailureExpr.java
@@ -0,0 +1,43 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Out Failure Expr</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.OutFailureExpr#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getOutFailureExpr()
+ * @model
+ * @generated
+ */
+public interface OutFailureExpr extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Failures</b></em>' containment reference list.
+   * The list contents are of type {@link org.polarsys.chess.xtext.flaDsl.Definitions}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Failures</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Failures</em>' containment reference list.
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getOutFailureExpr_Failures()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Definitions> getFailures();
+
+} // OutFailureExpr
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/OutputExpression.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/OutputExpression.java
new file mode 100644
index 0000000..01a45f5
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/OutputExpression.java
@@ -0,0 +1,80 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Port;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Output Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.OutputExpression#getRef <em>Ref</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.OutputExpression#getFailureExpr <em>Failure Expr</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getOutputExpression()
+ * @model
+ * @generated
+ */
+public interface OutputExpression extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ref</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ref</em>' reference.
+   * @see #setRef(Port)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getOutputExpression_Ref()
+   * @model
+   * @generated
+   */
+  Port getRef();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.OutputExpression#getRef <em>Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ref</em>' reference.
+   * @see #getRef()
+   * @generated
+   */
+  void setRef(Port value);
+
+  /**
+   * Returns the value of the '<em><b>Failure Expr</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Failure Expr</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Failure Expr</em>' containment reference.
+   * @see #setFailureExpr(OutFailureExpr)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getOutputExpression_FailureExpr()
+   * @model containment="true"
+   * @generated
+   */
+  OutFailureExpr getFailureExpr();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.OutputExpression#getFailureExpr <em>Failure Expr</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Failure Expr</em>' containment reference.
+   * @see #getFailureExpr()
+   * @generated
+   */
+  void setFailureExpr(OutFailureExpr value);
+
+} // OutputExpression
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Rhs.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Rhs.java
new file mode 100644
index 0000000..94a9dac
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/Rhs.java
@@ -0,0 +1,43 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Rhs</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.Rhs#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getRhs()
+ * @model
+ * @generated
+ */
+public interface Rhs extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Failures</b></em>' containment reference list.
+   * The list contents are of type {@link org.polarsys.chess.xtext.flaDsl.OutputExpression}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Failures</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Failures</em>' containment reference list.
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getRhs_Failures()
+   * @model containment="true"
+   * @generated
+   */
+  EList<OutputExpression> getFailures();
+
+} // Rhs
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/VariableDefinition.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/VariableDefinition.java
new file mode 100644
index 0000000..507e359
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/VariableDefinition.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Variable Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.VariableDefinition#getVariableName <em>Variable Name</em>}</li>
+ * </ul>
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getVariableDefinition()
+ * @model
+ * @generated
+ */
+public interface VariableDefinition extends Definitions
+{
+  /**
+   * Returns the value of the '<em><b>Variable Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Variable Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Variable Name</em>' attribute.
+   * @see #setVariableName(String)
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getVariableDefinition_VariableName()
+   * @model
+   * @generated
+   */
+  String getVariableName();
+
+  /**
+   * Sets the value of the '{@link org.polarsys.chess.xtext.flaDsl.VariableDefinition#getVariableName <em>Variable Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Variable Name</em>' attribute.
+   * @see #getVariableName()
+   * @generated
+   */
+  void setVariableName(String value);
+
+} // VariableDefinition
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/WildcardDefinition.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/WildcardDefinition.java
new file mode 100644
index 0000000..f7841d2
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/WildcardDefinition.java
@@ -0,0 +1,18 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Wildcard Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#getWildcardDefinition()
+ * @model
+ * @generated
+ */
+public interface WildcardDefinition extends Definitions
+{
+} // WildcardDefinition
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ACIDMitigationImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ACIDMitigationImpl.java
new file mode 100644
index 0000000..215e3a2
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ACIDMitigationImpl.java
@@ -0,0 +1,349 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.polarsys.chess.xtext.flaDsl.ACIDMitigation;
+import org.polarsys.chess.xtext.flaDsl.Amitigation;
+import org.polarsys.chess.xtext.flaDsl.Cmitigation;
+import org.polarsys.chess.xtext.flaDsl.Dmitigation;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.Imitigation;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>ACID Mitigation</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl#getA <em>A</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl#getC <em>C</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl#getI <em>I</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDMitigationImpl#getD <em>D</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ACIDMitigationImpl extends MinimalEObjectImpl.Container implements ACIDMitigation
+{
+  /**
+   * The default value of the '{@link #getA() <em>A</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getA()
+   * @generated
+   * @ordered
+   */
+  protected static final Amitigation A_EDEFAULT = Amitigation.ALL_OR_NOTHING;
+
+  /**
+   * The cached value of the '{@link #getA() <em>A</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getA()
+   * @generated
+   * @ordered
+   */
+  protected Amitigation a = A_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getC() <em>C</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getC()
+   * @generated
+   * @ordered
+   */
+  protected static final Cmitigation C_EDEFAULT = Cmitigation.FULL_CONSISTENCY;
+
+  /**
+   * The cached value of the '{@link #getC() <em>C</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getC()
+   * @generated
+   * @ordered
+   */
+  protected Cmitigation c = C_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getI() <em>I</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getI()
+   * @generated
+   * @ordered
+   */
+  protected static final Imitigation I_EDEFAULT = Imitigation.SERIALIZABLE;
+
+  /**
+   * The cached value of the '{@link #getI() <em>I</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getI()
+   * @generated
+   * @ordered
+   */
+  protected Imitigation i = I_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getD() <em>D</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getD()
+   * @generated
+   * @ordered
+   */
+  protected static final Dmitigation D_EDEFAULT = Dmitigation.NO_LOSS;
+
+  /**
+   * The cached value of the '{@link #getD() <em>D</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getD()
+   * @generated
+   * @ordered
+   */
+  protected Dmitigation d = D_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ACIDMitigationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.ACID_MITIGATION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Amitigation getA()
+  {
+    return a;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setA(Amitigation newA)
+  {
+    Amitigation oldA = a;
+    a = newA == null ? A_EDEFAULT : newA;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACID_MITIGATION__A, oldA, a));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Cmitigation getC()
+  {
+    return c;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setC(Cmitigation newC)
+  {
+    Cmitigation oldC = c;
+    c = newC == null ? C_EDEFAULT : newC;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACID_MITIGATION__C, oldC, c));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Imitigation getI()
+  {
+    return i;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setI(Imitigation newI)
+  {
+    Imitigation oldI = i;
+    i = newI == null ? I_EDEFAULT : newI;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACID_MITIGATION__I, oldI, i));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Dmitigation getD()
+  {
+    return d;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setD(Dmitigation newD)
+  {
+    Dmitigation oldD = d;
+    d = newD == null ? D_EDEFAULT : newD;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACID_MITIGATION__D, oldD, d));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACID_MITIGATION__A:
+        return getA();
+      case FlaDslPackage.ACID_MITIGATION__C:
+        return getC();
+      case FlaDslPackage.ACID_MITIGATION__I:
+        return getI();
+      case FlaDslPackage.ACID_MITIGATION__D:
+        return getD();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACID_MITIGATION__A:
+        setA((Amitigation)newValue);
+        return;
+      case FlaDslPackage.ACID_MITIGATION__C:
+        setC((Cmitigation)newValue);
+        return;
+      case FlaDslPackage.ACID_MITIGATION__I:
+        setI((Imitigation)newValue);
+        return;
+      case FlaDslPackage.ACID_MITIGATION__D:
+        setD((Dmitigation)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACID_MITIGATION__A:
+        setA(A_EDEFAULT);
+        return;
+      case FlaDslPackage.ACID_MITIGATION__C:
+        setC(C_EDEFAULT);
+        return;
+      case FlaDslPackage.ACID_MITIGATION__I:
+        setI(I_EDEFAULT);
+        return;
+      case FlaDslPackage.ACID_MITIGATION__D:
+        setD(D_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACID_MITIGATION__A:
+        return a != A_EDEFAULT;
+      case FlaDslPackage.ACID_MITIGATION__C:
+        return c != C_EDEFAULT;
+      case FlaDslPackage.ACID_MITIGATION__I:
+        return i != I_EDEFAULT;
+      case FlaDslPackage.ACID_MITIGATION__D:
+        return d != D_EDEFAULT;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (a: ");
+    result.append(a);
+    result.append(", c: ");
+    result.append(c);
+    result.append(", i: ");
+    result.append(i);
+    result.append(", d: ");
+    result.append(d);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ACIDMitigationImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ACIDavoidableImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ACIDavoidableImpl.java
new file mode 100644
index 0000000..b33a393
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ACIDavoidableImpl.java
@@ -0,0 +1,349 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.polarsys.chess.xtext.flaDsl.ACIDavoidable;
+import org.polarsys.chess.xtext.flaDsl.Aavoidable;
+import org.polarsys.chess.xtext.flaDsl.Cavoidable;
+import org.polarsys.chess.xtext.flaDsl.Davoidable;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.Iavoidable;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>ACI Davoidable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl#getA <em>A</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl#getC <em>C</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl#getI <em>I</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ACIDavoidableImpl#getD <em>D</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ACIDavoidableImpl extends MinimalEObjectImpl.Container implements ACIDavoidable
+{
+  /**
+   * The default value of the '{@link #getA() <em>A</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getA()
+   * @generated
+   * @ordered
+   */
+  protected static final Aavoidable A_EDEFAULT = Aavoidable.INCOMPLETION;
+
+  /**
+   * The cached value of the '{@link #getA() <em>A</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getA()
+   * @generated
+   * @ordered
+   */
+  protected Aavoidable a = A_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getC() <em>C</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getC()
+   * @generated
+   * @ordered
+   */
+  protected static final Cavoidable C_EDEFAULT = Cavoidable.INCONSISTENCY;
+
+  /**
+   * The cached value of the '{@link #getC() <em>C</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getC()
+   * @generated
+   * @ordered
+   */
+  protected Cavoidable c = C_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getI() <em>I</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getI()
+   * @generated
+   * @ordered
+   */
+  protected static final Iavoidable I_EDEFAULT = Iavoidable.INTERFERENCE;
+
+  /**
+   * The cached value of the '{@link #getI() <em>I</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getI()
+   * @generated
+   * @ordered
+   */
+  protected Iavoidable i = I_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getD() <em>D</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getD()
+   * @generated
+   * @ordered
+   */
+  protected static final Davoidable D_EDEFAULT = Davoidable.IMPERMANENCE;
+
+  /**
+   * The cached value of the '{@link #getD() <em>D</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getD()
+   * @generated
+   * @ordered
+   */
+  protected Davoidable d = D_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ACIDavoidableImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.ACI_DAVOIDABLE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Aavoidable getA()
+  {
+    return a;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setA(Aavoidable newA)
+  {
+    Aavoidable oldA = a;
+    a = newA == null ? A_EDEFAULT : newA;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACI_DAVOIDABLE__A, oldA, a));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Cavoidable getC()
+  {
+    return c;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setC(Cavoidable newC)
+  {
+    Cavoidable oldC = c;
+    c = newC == null ? C_EDEFAULT : newC;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACI_DAVOIDABLE__C, oldC, c));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Iavoidable getI()
+  {
+    return i;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setI(Iavoidable newI)
+  {
+    Iavoidable oldI = i;
+    i = newI == null ? I_EDEFAULT : newI;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACI_DAVOIDABLE__I, oldI, i));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Davoidable getD()
+  {
+    return d;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setD(Davoidable newD)
+  {
+    Davoidable oldD = d;
+    d = newD == null ? D_EDEFAULT : newD;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.ACI_DAVOIDABLE__D, oldD, d));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACI_DAVOIDABLE__A:
+        return getA();
+      case FlaDslPackage.ACI_DAVOIDABLE__C:
+        return getC();
+      case FlaDslPackage.ACI_DAVOIDABLE__I:
+        return getI();
+      case FlaDslPackage.ACI_DAVOIDABLE__D:
+        return getD();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACI_DAVOIDABLE__A:
+        setA((Aavoidable)newValue);
+        return;
+      case FlaDslPackage.ACI_DAVOIDABLE__C:
+        setC((Cavoidable)newValue);
+        return;
+      case FlaDslPackage.ACI_DAVOIDABLE__I:
+        setI((Iavoidable)newValue);
+        return;
+      case FlaDslPackage.ACI_DAVOIDABLE__D:
+        setD((Davoidable)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACI_DAVOIDABLE__A:
+        setA(A_EDEFAULT);
+        return;
+      case FlaDslPackage.ACI_DAVOIDABLE__C:
+        setC(C_EDEFAULT);
+        return;
+      case FlaDslPackage.ACI_DAVOIDABLE__I:
+        setI(I_EDEFAULT);
+        return;
+      case FlaDslPackage.ACI_DAVOIDABLE__D:
+        setD(D_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.ACI_DAVOIDABLE__A:
+        return a != A_EDEFAULT;
+      case FlaDslPackage.ACI_DAVOIDABLE__C:
+        return c != C_EDEFAULT;
+      case FlaDslPackage.ACI_DAVOIDABLE__I:
+        return i != I_EDEFAULT;
+      case FlaDslPackage.ACI_DAVOIDABLE__D:
+        return d != D_EDEFAULT;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (a: ");
+    result.append(a);
+    result.append(", c: ");
+    result.append(c);
+    result.append(", i: ");
+    result.append(i);
+    result.append(", d: ");
+    result.append(d);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ACIDavoidableImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/BehaviourImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/BehaviourImpl.java
new file mode 100644
index 0000000..d81ff2e
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/BehaviourImpl.java
@@ -0,0 +1,167 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.polarsys.chess.xtext.flaDsl.Behaviour;
+import org.polarsys.chess.xtext.flaDsl.Expression;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Behaviour</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.BehaviourImpl#getRules <em>Rules</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class BehaviourImpl extends MinimalEObjectImpl.Container implements Behaviour
+{
+  /**
+   * The cached value of the '{@link #getRules() <em>Rules</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRules()
+   * @generated
+   * @ordered
+   */
+  protected EList<Expression> rules;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected BehaviourImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.BEHAVIOUR;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Expression> getRules()
+  {
+    if (rules == null)
+    {
+      rules = new EObjectContainmentEList<Expression>(Expression.class, this, FlaDslPackage.BEHAVIOUR__RULES);
+    }
+    return rules;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.BEHAVIOUR__RULES:
+        return ((InternalEList<?>)getRules()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.BEHAVIOUR__RULES:
+        return getRules();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.BEHAVIOUR__RULES:
+        getRules().clear();
+        getRules().addAll((Collection<? extends Expression>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.BEHAVIOUR__RULES:
+        getRules().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.BEHAVIOUR__RULES:
+        return rules != null && !rules.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //BehaviourImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ComplexNofailureDefinitionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ComplexNofailureDefinitionImpl.java
new file mode 100644
index 0000000..91737e4
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ComplexNofailureDefinitionImpl.java
@@ -0,0 +1,40 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.polarsys.chess.xtext.flaDsl.ComplexNofailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Complex Nofailure Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ComplexNofailureDefinitionImpl extends DefinitionsImpl implements ComplexNofailureDefinition
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ComplexNofailureDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.COMPLEX_NOFAILURE_DEFINITION;
+  }
+
+} //ComplexNofailureDefinitionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/DefinitionsImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/DefinitionsImpl.java
new file mode 100644
index 0000000..4166a3f
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/DefinitionsImpl.java
@@ -0,0 +1,42 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.polarsys.chess.xtext.flaDsl.Definitions;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Definitions</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class DefinitionsImpl extends MinimalEObjectImpl.Container implements Definitions
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected DefinitionsImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.DEFINITIONS;
+  }
+
+} //DefinitionsImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ExpressionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ExpressionImpl.java
new file mode 100644
index 0000000..3f2b608
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/ExpressionImpl.java
@@ -0,0 +1,266 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.polarsys.chess.xtext.flaDsl.Expression;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.Lhs;
+import org.polarsys.chess.xtext.flaDsl.Rhs;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ExpressionImpl#getLhs <em>Lhs</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.ExpressionImpl#getRhs <em>Rhs</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ExpressionImpl extends MinimalEObjectImpl.Container implements Expression
+{
+  /**
+   * The cached value of the '{@link #getLhs() <em>Lhs</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLhs()
+   * @generated
+   * @ordered
+   */
+  protected Lhs lhs;
+
+  /**
+   * The cached value of the '{@link #getRhs() <em>Rhs</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRhs()
+   * @generated
+   * @ordered
+   */
+  protected Rhs rhs;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.EXPRESSION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Lhs getLhs()
+  {
+    return lhs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetLhs(Lhs newLhs, NotificationChain msgs)
+  {
+    Lhs oldLhs = lhs;
+    lhs = newLhs;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FlaDslPackage.EXPRESSION__LHS, oldLhs, newLhs);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLhs(Lhs newLhs)
+  {
+    if (newLhs != lhs)
+    {
+      NotificationChain msgs = null;
+      if (lhs != null)
+        msgs = ((InternalEObject)lhs).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.EXPRESSION__LHS, null, msgs);
+      if (newLhs != null)
+        msgs = ((InternalEObject)newLhs).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.EXPRESSION__LHS, null, msgs);
+      msgs = basicSetLhs(newLhs, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.EXPRESSION__LHS, newLhs, newLhs));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rhs getRhs()
+  {
+    return rhs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRhs(Rhs newRhs, NotificationChain msgs)
+  {
+    Rhs oldRhs = rhs;
+    rhs = newRhs;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FlaDslPackage.EXPRESSION__RHS, oldRhs, newRhs);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRhs(Rhs newRhs)
+  {
+    if (newRhs != rhs)
+    {
+      NotificationChain msgs = null;
+      if (rhs != null)
+        msgs = ((InternalEObject)rhs).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.EXPRESSION__RHS, null, msgs);
+      if (newRhs != null)
+        msgs = ((InternalEObject)newRhs).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.EXPRESSION__RHS, null, msgs);
+      msgs = basicSetRhs(newRhs, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.EXPRESSION__RHS, newRhs, newRhs));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.EXPRESSION__LHS:
+        return basicSetLhs(null, msgs);
+      case FlaDslPackage.EXPRESSION__RHS:
+        return basicSetRhs(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.EXPRESSION__LHS:
+        return getLhs();
+      case FlaDslPackage.EXPRESSION__RHS:
+        return getRhs();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.EXPRESSION__LHS:
+        setLhs((Lhs)newValue);
+        return;
+      case FlaDslPackage.EXPRESSION__RHS:
+        setRhs((Rhs)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.EXPRESSION__LHS:
+        setLhs((Lhs)null);
+        return;
+      case FlaDslPackage.EXPRESSION__RHS:
+        setRhs((Rhs)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.EXPRESSION__LHS:
+        return lhs != null;
+      case FlaDslPackage.EXPRESSION__RHS:
+        return rhs != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ExpressionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FailureDefinitionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FailureDefinitionImpl.java
new file mode 100644
index 0000000..fe7ed2c
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FailureDefinitionImpl.java
@@ -0,0 +1,265 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.polarsys.chess.xtext.flaDsl.ACIDavoidable;
+import org.polarsys.chess.xtext.flaDsl.FailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.FailureType;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Failure Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.FailureDefinitionImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.FailureDefinitionImpl#getAcidAvoidable <em>Acid Avoidable</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class FailureDefinitionImpl extends DefinitionsImpl implements FailureDefinition
+{
+  /**
+   * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getType()
+   * @generated
+   * @ordered
+   */
+  protected static final FailureType TYPE_EDEFAULT = FailureType.NO_FAILURE;
+
+  /**
+   * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getType()
+   * @generated
+   * @ordered
+   */
+  protected FailureType type = TYPE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getAcidAvoidable() <em>Acid Avoidable</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAcidAvoidable()
+   * @generated
+   * @ordered
+   */
+  protected ACIDavoidable acidAvoidable;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected FailureDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.FAILURE_DEFINITION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FailureType getType()
+  {
+    return type;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setType(FailureType newType)
+  {
+    FailureType oldType = type;
+    type = newType == null ? TYPE_EDEFAULT : newType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.FAILURE_DEFINITION__TYPE, oldType, type));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ACIDavoidable getAcidAvoidable()
+  {
+    return acidAvoidable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAcidAvoidable(ACIDavoidable newAcidAvoidable, NotificationChain msgs)
+  {
+    ACIDavoidable oldAcidAvoidable = acidAvoidable;
+    acidAvoidable = newAcidAvoidable;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE, oldAcidAvoidable, newAcidAvoidable);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAcidAvoidable(ACIDavoidable newAcidAvoidable)
+  {
+    if (newAcidAvoidable != acidAvoidable)
+    {
+      NotificationChain msgs = null;
+      if (acidAvoidable != null)
+        msgs = ((InternalEObject)acidAvoidable).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE, null, msgs);
+      if (newAcidAvoidable != null)
+        msgs = ((InternalEObject)newAcidAvoidable).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE, null, msgs);
+      msgs = basicSetAcidAvoidable(newAcidAvoidable, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE, newAcidAvoidable, newAcidAvoidable));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE:
+        return basicSetAcidAvoidable(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.FAILURE_DEFINITION__TYPE:
+        return getType();
+      case FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE:
+        return getAcidAvoidable();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.FAILURE_DEFINITION__TYPE:
+        setType((FailureType)newValue);
+        return;
+      case FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE:
+        setAcidAvoidable((ACIDavoidable)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.FAILURE_DEFINITION__TYPE:
+        setType(TYPE_EDEFAULT);
+        return;
+      case FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE:
+        setAcidAvoidable((ACIDavoidable)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.FAILURE_DEFINITION__TYPE:
+        return type != TYPE_EDEFAULT;
+      case FlaDslPackage.FAILURE_DEFINITION__ACID_AVOIDABLE:
+        return acidAvoidable != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (type: ");
+    result.append(type);
+    result.append(')');
+    return result.toString();
+  }
+
+} //FailureDefinitionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FlaDslFactoryImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FlaDslFactoryImpl.java
new file mode 100644
index 0000000..fecc9d3
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FlaDslFactoryImpl.java
@@ -0,0 +1,551 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.polarsys.chess.xtext.flaDsl.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FlaDslFactoryImpl extends EFactoryImpl implements FlaDslFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static FlaDslFactory init()
+  {
+    try
+    {
+      FlaDslFactory theFlaDslFactory = (FlaDslFactory)EPackage.Registry.INSTANCE.getEFactory(FlaDslPackage.eNS_URI);
+      if (theFlaDslFactory != null)
+      {
+        return theFlaDslFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new FlaDslFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FlaDslFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+      case FlaDslPackage.BEHAVIOUR: return createBehaviour();
+      case FlaDslPackage.EXPRESSION: return createExpression();
+      case FlaDslPackage.LHS: return createLhs();
+      case FlaDslPackage.RHS: return createRhs();
+      case FlaDslPackage.INPUT_EXPRESSION: return createInputExpression();
+      case FlaDslPackage.OUTPUT_EXPRESSION: return createOutputExpression();
+      case FlaDslPackage.IN_FAILURE_EXPR: return createInFailureExpr();
+      case FlaDslPackage.OUT_FAILURE_EXPR: return createOutFailureExpr();
+      case FlaDslPackage.DEFINITIONS: return createDefinitions();
+      case FlaDslPackage.FAILURE_DEFINITION: return createFailureDefinition();
+      case FlaDslPackage.NO_FAILURE_DEFINITION: return createNoFailureDefinition();
+      case FlaDslPackage.COMPLEX_NOFAILURE_DEFINITION: return createComplexNofailureDefinition();
+      case FlaDslPackage.WILDCARD_DEFINITION: return createWildcardDefinition();
+      case FlaDslPackage.VARIABLE_DEFINITION: return createVariableDefinition();
+      case FlaDslPackage.ACI_DAVOIDABLE: return createACIDavoidable();
+      case FlaDslPackage.ACID_MITIGATION: return createACIDMitigation();
+      default:
+        throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object createFromString(EDataType eDataType, String initialValue)
+  {
+    switch (eDataType.getClassifierID())
+    {
+      case FlaDslPackage.FAILURE_TYPE:
+        return createFailureTypeFromString(eDataType, initialValue);
+      case FlaDslPackage.AAVOIDABLE:
+        return createAavoidableFromString(eDataType, initialValue);
+      case FlaDslPackage.CAVOIDABLE:
+        return createCavoidableFromString(eDataType, initialValue);
+      case FlaDslPackage.IAVOIDABLE:
+        return createIavoidableFromString(eDataType, initialValue);
+      case FlaDslPackage.DAVOIDABLE:
+        return createDavoidableFromString(eDataType, initialValue);
+      case FlaDslPackage.AMITIGATION:
+        return createAmitigationFromString(eDataType, initialValue);
+      case FlaDslPackage.CMITIGATION:
+        return createCmitigationFromString(eDataType, initialValue);
+      case FlaDslPackage.IMITIGATION:
+        return createImitigationFromString(eDataType, initialValue);
+      case FlaDslPackage.DMITIGATION:
+        return createDmitigationFromString(eDataType, initialValue);
+      default:
+        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String convertToString(EDataType eDataType, Object instanceValue)
+  {
+    switch (eDataType.getClassifierID())
+    {
+      case FlaDslPackage.FAILURE_TYPE:
+        return convertFailureTypeToString(eDataType, instanceValue);
+      case FlaDslPackage.AAVOIDABLE:
+        return convertAavoidableToString(eDataType, instanceValue);
+      case FlaDslPackage.CAVOIDABLE:
+        return convertCavoidableToString(eDataType, instanceValue);
+      case FlaDslPackage.IAVOIDABLE:
+        return convertIavoidableToString(eDataType, instanceValue);
+      case FlaDslPackage.DAVOIDABLE:
+        return convertDavoidableToString(eDataType, instanceValue);
+      case FlaDslPackage.AMITIGATION:
+        return convertAmitigationToString(eDataType, instanceValue);
+      case FlaDslPackage.CMITIGATION:
+        return convertCmitigationToString(eDataType, instanceValue);
+      case FlaDslPackage.IMITIGATION:
+        return convertImitigationToString(eDataType, instanceValue);
+      case FlaDslPackage.DMITIGATION:
+        return convertDmitigationToString(eDataType, instanceValue);
+      default:
+        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Behaviour createBehaviour()
+  {
+    BehaviourImpl behaviour = new BehaviourImpl();
+    return behaviour;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Expression createExpression()
+  {
+    ExpressionImpl expression = new ExpressionImpl();
+    return expression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Lhs createLhs()
+  {
+    LhsImpl lhs = new LhsImpl();
+    return lhs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rhs createRhs()
+  {
+    RhsImpl rhs = new RhsImpl();
+    return rhs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public InputExpression createInputExpression()
+  {
+    InputExpressionImpl inputExpression = new InputExpressionImpl();
+    return inputExpression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public OutputExpression createOutputExpression()
+  {
+    OutputExpressionImpl outputExpression = new OutputExpressionImpl();
+    return outputExpression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public InFailureExpr createInFailureExpr()
+  {
+    InFailureExprImpl inFailureExpr = new InFailureExprImpl();
+    return inFailureExpr;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public OutFailureExpr createOutFailureExpr()
+  {
+    OutFailureExprImpl outFailureExpr = new OutFailureExprImpl();
+    return outFailureExpr;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Definitions createDefinitions()
+  {
+    DefinitionsImpl definitions = new DefinitionsImpl();
+    return definitions;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FailureDefinition createFailureDefinition()
+  {
+    FailureDefinitionImpl failureDefinition = new FailureDefinitionImpl();
+    return failureDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NoFailureDefinition createNoFailureDefinition()
+  {
+    NoFailureDefinitionImpl noFailureDefinition = new NoFailureDefinitionImpl();
+    return noFailureDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ComplexNofailureDefinition createComplexNofailureDefinition()
+  {
+    ComplexNofailureDefinitionImpl complexNofailureDefinition = new ComplexNofailureDefinitionImpl();
+    return complexNofailureDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public WildcardDefinition createWildcardDefinition()
+  {
+    WildcardDefinitionImpl wildcardDefinition = new WildcardDefinitionImpl();
+    return wildcardDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public VariableDefinition createVariableDefinition()
+  {
+    VariableDefinitionImpl variableDefinition = new VariableDefinitionImpl();
+    return variableDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ACIDavoidable createACIDavoidable()
+  {
+    ACIDavoidableImpl aciDavoidable = new ACIDavoidableImpl();
+    return aciDavoidable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ACIDMitigation createACIDMitigation()
+  {
+    ACIDMitigationImpl acidMitigation = new ACIDMitigationImpl();
+    return acidMitigation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FailureType createFailureTypeFromString(EDataType eDataType, String initialValue)
+  {
+    FailureType result = FailureType.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertFailureTypeToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Aavoidable createAavoidableFromString(EDataType eDataType, String initialValue)
+  {
+    Aavoidable result = Aavoidable.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertAavoidableToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Cavoidable createCavoidableFromString(EDataType eDataType, String initialValue)
+  {
+    Cavoidable result = Cavoidable.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertCavoidableToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Iavoidable createIavoidableFromString(EDataType eDataType, String initialValue)
+  {
+    Iavoidable result = Iavoidable.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertIavoidableToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Davoidable createDavoidableFromString(EDataType eDataType, String initialValue)
+  {
+    Davoidable result = Davoidable.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertDavoidableToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Amitigation createAmitigationFromString(EDataType eDataType, String initialValue)
+  {
+    Amitigation result = Amitigation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertAmitigationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Cmitigation createCmitigationFromString(EDataType eDataType, String initialValue)
+  {
+    Cmitigation result = Cmitigation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertCmitigationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Imitigation createImitigationFromString(EDataType eDataType, String initialValue)
+  {
+    Imitigation result = Imitigation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertImitigationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Dmitigation createDmitigationFromString(EDataType eDataType, String initialValue)
+  {
+    Dmitigation result = Dmitigation.get(initialValue);
+    if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertDmitigationToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FlaDslPackage getFlaDslPackage()
+  {
+    return (FlaDslPackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static FlaDslPackage getPackage()
+  {
+    return FlaDslPackage.eINSTANCE;
+  }
+
+} //FlaDslFactoryImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FlaDslPackageImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FlaDslPackageImpl.java
new file mode 100644
index 0000000..74c51e6
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/FlaDslPackageImpl.java
@@ -0,0 +1,1026 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+import org.polarsys.chess.xtext.flaDsl.ACIDMitigation;
+import org.polarsys.chess.xtext.flaDsl.ACIDavoidable;
+import org.polarsys.chess.xtext.flaDsl.Aavoidable;
+import org.polarsys.chess.xtext.flaDsl.Amitigation;
+import org.polarsys.chess.xtext.flaDsl.Behaviour;
+import org.polarsys.chess.xtext.flaDsl.Cavoidable;
+import org.polarsys.chess.xtext.flaDsl.Cmitigation;
+import org.polarsys.chess.xtext.flaDsl.ComplexNofailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.Davoidable;
+import org.polarsys.chess.xtext.flaDsl.Definitions;
+import org.polarsys.chess.xtext.flaDsl.Dmitigation;
+import org.polarsys.chess.xtext.flaDsl.Expression;
+import org.polarsys.chess.xtext.flaDsl.FailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.FailureType;
+import org.polarsys.chess.xtext.flaDsl.FlaDslFactory;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.Iavoidable;
+import org.polarsys.chess.xtext.flaDsl.Imitigation;
+import org.polarsys.chess.xtext.flaDsl.InFailureExpr;
+import org.polarsys.chess.xtext.flaDsl.InputExpression;
+import org.polarsys.chess.xtext.flaDsl.Lhs;
+import org.polarsys.chess.xtext.flaDsl.NoFailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.OutFailureExpr;
+import org.polarsys.chess.xtext.flaDsl.OutputExpression;
+import org.polarsys.chess.xtext.flaDsl.Rhs;
+import org.polarsys.chess.xtext.flaDsl.VariableDefinition;
+import org.polarsys.chess.xtext.flaDsl.WildcardDefinition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FlaDslPackageImpl extends EPackageImpl implements FlaDslPackage
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass behaviourEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass expressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass lhsEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass rhsEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass inputExpressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass outputExpressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass inFailureExprEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass outFailureExprEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass definitionsEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass failureDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass noFailureDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass complexNofailureDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass wildcardDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass variableDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass aciDavoidableEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass acidMitigationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum failureTypeEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum aavoidableEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum cavoidableEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum iavoidableEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum davoidableEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum amitigationEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum cmitigationEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum imitigationEEnum = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum dmitigationEEnum = null;
+
+  /**
+   * Creates an instance of the model <b>Package</b>, registered with
+   * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+   * package URI value.
+   * <p>Note: the correct way to create the package is via the static
+   * factory method {@link #init init()}, which also performs
+   * initialization of the package, or returns the registered package,
+   * if one already exists.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.ecore.EPackage.Registry
+   * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private FlaDslPackageImpl()
+  {
+    super(eNS_URI, FlaDslFactory.eINSTANCE);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static boolean isInited = false;
+
+  /**
+   * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+   * 
+   * <p>This method is used to initialize {@link FlaDslPackage#eINSTANCE} when that field is accessed.
+   * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #eNS_URI
+   * @see #createPackageContents()
+   * @see #initializePackageContents()
+   * @generated
+   */
+  public static FlaDslPackage init()
+  {
+    if (isInited) return (FlaDslPackage)EPackage.Registry.INSTANCE.getEPackage(FlaDslPackage.eNS_URI);
+
+    // Obtain or create and register package
+    FlaDslPackageImpl theFlaDslPackage = (FlaDslPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof FlaDslPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new FlaDslPackageImpl());
+
+    isInited = true;
+
+    // Initialize simple dependencies
+    UMLPackage.eINSTANCE.eClass();
+
+    // Create package meta-data objects
+    theFlaDslPackage.createPackageContents();
+
+    // Initialize created meta-data
+    theFlaDslPackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theFlaDslPackage.freeze();
+
+  
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(FlaDslPackage.eNS_URI, theFlaDslPackage);
+    return theFlaDslPackage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBehaviour()
+  {
+    return behaviourEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBehaviour_Rules()
+  {
+    return (EReference)behaviourEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getExpression()
+  {
+    return expressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExpression_Lhs()
+  {
+    return (EReference)expressionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExpression_Rhs()
+  {
+    return (EReference)expressionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getLhs()
+  {
+    return lhsEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getLhs_Failures()
+  {
+    return (EReference)lhsEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getRhs()
+  {
+    return rhsEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getRhs_Failures()
+  {
+    return (EReference)rhsEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getInputExpression()
+  {
+    return inputExpressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getInputExpression_Ref()
+  {
+    return (EReference)inputExpressionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getInputExpression_FailureExpr()
+  {
+    return (EReference)inputExpressionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getOutputExpression()
+  {
+    return outputExpressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getOutputExpression_Ref()
+  {
+    return (EReference)outputExpressionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getOutputExpression_FailureExpr()
+  {
+    return (EReference)outputExpressionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getInFailureExpr()
+  {
+    return inFailureExprEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getInFailureExpr_Failures()
+  {
+    return (EReference)inFailureExprEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getOutFailureExpr()
+  {
+    return outFailureExprEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getOutFailureExpr_Failures()
+  {
+    return (EReference)outFailureExprEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getDefinitions()
+  {
+    return definitionsEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getFailureDefinition()
+  {
+    return failureDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getFailureDefinition_Type()
+  {
+    return (EAttribute)failureDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getFailureDefinition_AcidAvoidable()
+  {
+    return (EReference)failureDefinitionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getNoFailureDefinition()
+  {
+    return noFailureDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getNoFailureDefinition_AcidMitigation()
+  {
+    return (EReference)noFailureDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getComplexNofailureDefinition()
+  {
+    return complexNofailureDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getWildcardDefinition()
+  {
+    return wildcardDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getVariableDefinition()
+  {
+    return variableDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getVariableDefinition_VariableName()
+  {
+    return (EAttribute)variableDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getACIDavoidable()
+  {
+    return aciDavoidableEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDavoidable_A()
+  {
+    return (EAttribute)aciDavoidableEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDavoidable_C()
+  {
+    return (EAttribute)aciDavoidableEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDavoidable_I()
+  {
+    return (EAttribute)aciDavoidableEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDavoidable_D()
+  {
+    return (EAttribute)aciDavoidableEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getACIDMitigation()
+  {
+    return acidMitigationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDMitigation_A()
+  {
+    return (EAttribute)acidMitigationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDMitigation_C()
+  {
+    return (EAttribute)acidMitigationEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDMitigation_I()
+  {
+    return (EAttribute)acidMitigationEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getACIDMitigation_D()
+  {
+    return (EAttribute)acidMitigationEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getFailureType()
+  {
+    return failureTypeEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getAavoidable()
+  {
+    return aavoidableEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getCavoidable()
+  {
+    return cavoidableEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getIavoidable()
+  {
+    return iavoidableEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getDavoidable()
+  {
+    return davoidableEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getAmitigation()
+  {
+    return amitigationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getCmitigation()
+  {
+    return cmitigationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getImitigation()
+  {
+    return imitigationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getDmitigation()
+  {
+    return dmitigationEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FlaDslFactory getFlaDslFactory()
+  {
+    return (FlaDslFactory)getEFactoryInstance();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private boolean isCreated = false;
+
+  /**
+   * Creates the meta-model objects for the package.  This method is
+   * guarded to have no affect on any invocation but its first.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void createPackageContents()
+  {
+    if (isCreated) return;
+    isCreated = true;
+
+    // Create classes and their features
+    behaviourEClass = createEClass(BEHAVIOUR);
+    createEReference(behaviourEClass, BEHAVIOUR__RULES);
+
+    expressionEClass = createEClass(EXPRESSION);
+    createEReference(expressionEClass, EXPRESSION__LHS);
+    createEReference(expressionEClass, EXPRESSION__RHS);
+
+    lhsEClass = createEClass(LHS);
+    createEReference(lhsEClass, LHS__FAILURES);
+
+    rhsEClass = createEClass(RHS);
+    createEReference(rhsEClass, RHS__FAILURES);
+
+    inputExpressionEClass = createEClass(INPUT_EXPRESSION);
+    createEReference(inputExpressionEClass, INPUT_EXPRESSION__REF);
+    createEReference(inputExpressionEClass, INPUT_EXPRESSION__FAILURE_EXPR);
+
+    outputExpressionEClass = createEClass(OUTPUT_EXPRESSION);
+    createEReference(outputExpressionEClass, OUTPUT_EXPRESSION__REF);
+    createEReference(outputExpressionEClass, OUTPUT_EXPRESSION__FAILURE_EXPR);
+
+    inFailureExprEClass = createEClass(IN_FAILURE_EXPR);
+    createEReference(inFailureExprEClass, IN_FAILURE_EXPR__FAILURES);
+
+    outFailureExprEClass = createEClass(OUT_FAILURE_EXPR);
+    createEReference(outFailureExprEClass, OUT_FAILURE_EXPR__FAILURES);
+
+    definitionsEClass = createEClass(DEFINITIONS);
+
+    failureDefinitionEClass = createEClass(FAILURE_DEFINITION);
+    createEAttribute(failureDefinitionEClass, FAILURE_DEFINITION__TYPE);
+    createEReference(failureDefinitionEClass, FAILURE_DEFINITION__ACID_AVOIDABLE);
+
+    noFailureDefinitionEClass = createEClass(NO_FAILURE_DEFINITION);
+    createEReference(noFailureDefinitionEClass, NO_FAILURE_DEFINITION__ACID_MITIGATION);
+
+    complexNofailureDefinitionEClass = createEClass(COMPLEX_NOFAILURE_DEFINITION);
+
+    wildcardDefinitionEClass = createEClass(WILDCARD_DEFINITION);
+
+    variableDefinitionEClass = createEClass(VARIABLE_DEFINITION);
+    createEAttribute(variableDefinitionEClass, VARIABLE_DEFINITION__VARIABLE_NAME);
+
+    aciDavoidableEClass = createEClass(ACI_DAVOIDABLE);
+    createEAttribute(aciDavoidableEClass, ACI_DAVOIDABLE__A);
+    createEAttribute(aciDavoidableEClass, ACI_DAVOIDABLE__C);
+    createEAttribute(aciDavoidableEClass, ACI_DAVOIDABLE__I);
+    createEAttribute(aciDavoidableEClass, ACI_DAVOIDABLE__D);
+
+    acidMitigationEClass = createEClass(ACID_MITIGATION);
+    createEAttribute(acidMitigationEClass, ACID_MITIGATION__A);
+    createEAttribute(acidMitigationEClass, ACID_MITIGATION__C);
+    createEAttribute(acidMitigationEClass, ACID_MITIGATION__I);
+    createEAttribute(acidMitigationEClass, ACID_MITIGATION__D);
+
+    // Create enums
+    failureTypeEEnum = createEEnum(FAILURE_TYPE);
+    aavoidableEEnum = createEEnum(AAVOIDABLE);
+    cavoidableEEnum = createEEnum(CAVOIDABLE);
+    iavoidableEEnum = createEEnum(IAVOIDABLE);
+    davoidableEEnum = createEEnum(DAVOIDABLE);
+    amitigationEEnum = createEEnum(AMITIGATION);
+    cmitigationEEnum = createEEnum(CMITIGATION);
+    imitigationEEnum = createEEnum(IMITIGATION);
+    dmitigationEEnum = createEEnum(DMITIGATION);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private boolean isInitialized = false;
+
+  /**
+   * Complete the initialization of the package and its meta-model.  This
+   * method is guarded to have no affect on any invocation but its first.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void initializePackageContents()
+  {
+    if (isInitialized) return;
+    isInitialized = true;
+
+    // Initialize package
+    setName(eNAME);
+    setNsPrefix(eNS_PREFIX);
+    setNsURI(eNS_URI);
+
+    // Obtain other dependent packages
+    UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+    EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+    // Create type parameters
+
+    // Set bounds for type parameters
+
+    // Add supertypes to classes
+    failureDefinitionEClass.getESuperTypes().add(this.getDefinitions());
+    noFailureDefinitionEClass.getESuperTypes().add(this.getDefinitions());
+    noFailureDefinitionEClass.getESuperTypes().add(this.getComplexNofailureDefinition());
+    complexNofailureDefinitionEClass.getESuperTypes().add(this.getDefinitions());
+    wildcardDefinitionEClass.getESuperTypes().add(this.getDefinitions());
+    variableDefinitionEClass.getESuperTypes().add(this.getDefinitions());
+
+    // Initialize classes and features; add operations and parameters
+    initEClass(behaviourEClass, Behaviour.class, "Behaviour", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBehaviour_Rules(), this.getExpression(), null, "rules", null, 0, -1, Behaviour.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(expressionEClass, Expression.class, "Expression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getExpression_Lhs(), this.getLhs(), null, "lhs", null, 0, 1, Expression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getExpression_Rhs(), this.getRhs(), null, "rhs", null, 0, 1, Expression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(lhsEClass, Lhs.class, "Lhs", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getLhs_Failures(), this.getInputExpression(), null, "failures", null, 0, -1, Lhs.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(rhsEClass, Rhs.class, "Rhs", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getRhs_Failures(), this.getOutputExpression(), null, "failures", null, 0, -1, Rhs.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(inputExpressionEClass, InputExpression.class, "InputExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getInputExpression_Ref(), theUMLPackage.getPort(), null, "ref", null, 0, 1, InputExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getInputExpression_FailureExpr(), this.getInFailureExpr(), null, "failureExpr", null, 0, 1, InputExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(outputExpressionEClass, OutputExpression.class, "OutputExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getOutputExpression_Ref(), theUMLPackage.getPort(), null, "ref", null, 0, 1, OutputExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getOutputExpression_FailureExpr(), this.getOutFailureExpr(), null, "failureExpr", null, 0, 1, OutputExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(inFailureExprEClass, InFailureExpr.class, "InFailureExpr", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getInFailureExpr_Failures(), this.getDefinitions(), null, "failures", null, 0, -1, InFailureExpr.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(outFailureExprEClass, OutFailureExpr.class, "OutFailureExpr", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getOutFailureExpr_Failures(), this.getDefinitions(), null, "failures", null, 0, -1, OutFailureExpr.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(definitionsEClass, Definitions.class, "Definitions", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(failureDefinitionEClass, FailureDefinition.class, "FailureDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getFailureDefinition_Type(), this.getFailureType(), "type", null, 0, 1, FailureDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getFailureDefinition_AcidAvoidable(), this.getACIDavoidable(), null, "acidAvoidable", null, 0, 1, FailureDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(noFailureDefinitionEClass, NoFailureDefinition.class, "NoFailureDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getNoFailureDefinition_AcidMitigation(), this.getACIDMitigation(), null, "acidMitigation", null, 0, 1, NoFailureDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(complexNofailureDefinitionEClass, ComplexNofailureDefinition.class, "ComplexNofailureDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(wildcardDefinitionEClass, WildcardDefinition.class, "WildcardDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(variableDefinitionEClass, VariableDefinition.class, "VariableDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getVariableDefinition_VariableName(), theEcorePackage.getEString(), "variableName", null, 0, 1, VariableDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(aciDavoidableEClass, ACIDavoidable.class, "ACIDavoidable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getACIDavoidable_A(), this.getAavoidable(), "a", null, 0, 1, ACIDavoidable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getACIDavoidable_C(), this.getCavoidable(), "c", null, 0, 1, ACIDavoidable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getACIDavoidable_I(), this.getIavoidable(), "i", null, 0, 1, ACIDavoidable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getACIDavoidable_D(), this.getDavoidable(), "d", null, 0, 1, ACIDavoidable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(acidMitigationEClass, ACIDMitigation.class, "ACIDMitigation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getACIDMitigation_A(), this.getAmitigation(), "a", null, 0, 1, ACIDMitigation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getACIDMitigation_C(), this.getCmitigation(), "c", null, 0, 1, ACIDMitigation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getACIDMitigation_I(), this.getImitigation(), "i", null, 0, 1, ACIDMitigation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getACIDMitigation_D(), this.getDmitigation(), "d", null, 0, 1, ACIDMitigation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    // Initialize enums and add enum literals
+    initEEnum(failureTypeEEnum, FailureType.class, "FailureType");
+    addEEnumLiteral(failureTypeEEnum, FailureType.NO_FAILURE);
+    addEEnumLiteral(failureTypeEEnum, FailureType.EARLY);
+    addEEnumLiteral(failureTypeEEnum, FailureType.LATE);
+    addEEnumLiteral(failureTypeEEnum, FailureType.COMMISSION);
+    addEEnumLiteral(failureTypeEEnum, FailureType.OMISSION);
+    addEEnumLiteral(failureTypeEEnum, FailureType.VALUE_SUBTLE);
+    addEEnumLiteral(failureTypeEEnum, FailureType.VALUE_COARSE);
+    addEEnumLiteral(failureTypeEEnum, FailureType.WILDCARD);
+    addEEnumLiteral(failureTypeEEnum, FailureType.VARIABLE);
+
+    initEEnum(aavoidableEEnum, Aavoidable.class, "Aavoidable");
+    addEEnumLiteral(aavoidableEEnum, Aavoidable.INCOMPLETION);
+    addEEnumLiteral(aavoidableEEnum, Aavoidable.NONE);
+    addEEnumLiteral(aavoidableEEnum, Aavoidable.UNSPECIFIED);
+
+    initEEnum(cavoidableEEnum, Cavoidable.class, "Cavoidable");
+    addEEnumLiteral(cavoidableEEnum, Cavoidable.INCONSISTENCY);
+    addEEnumLiteral(cavoidableEEnum, Cavoidable.NONE);
+    addEEnumLiteral(cavoidableEEnum, Cavoidable.UNSPECIFIED);
+
+    initEEnum(iavoidableEEnum, Iavoidable.class, "Iavoidable");
+    addEEnumLiteral(iavoidableEEnum, Iavoidable.INTERFERENCE);
+    addEEnumLiteral(iavoidableEEnum, Iavoidable.NONE);
+    addEEnumLiteral(iavoidableEEnum, Iavoidable.UNSPECIFIED);
+
+    initEEnum(davoidableEEnum, Davoidable.class, "Davoidable");
+    addEEnumLiteral(davoidableEEnum, Davoidable.IMPERMANENCE);
+    addEEnumLiteral(davoidableEEnum, Davoidable.NONE);
+    addEEnumLiteral(davoidableEEnum, Davoidable.UNSPECIFIED);
+
+    initEEnum(amitigationEEnum, Amitigation.class, "Amitigation");
+    addEEnumLiteral(amitigationEEnum, Amitigation.ALL_OR_NOTHING);
+    addEEnumLiteral(amitigationEEnum, Amitigation.ALL_OR_COMPENSATION);
+    addEEnumLiteral(amitigationEEnum, Amitigation.NONE);
+    addEEnumLiteral(amitigationEEnum, Amitigation.UNSPECIFIED);
+
+    initEEnum(cmitigationEEnum, Cmitigation.class, "Cmitigation");
+    addEEnumLiteral(cmitigationEEnum, Cmitigation.FULL_CONSISTENCY);
+    addEEnumLiteral(cmitigationEEnum, Cmitigation.RANGE_VIOLATION_ALLOWED);
+    addEEnumLiteral(cmitigationEEnum, Cmitigation.NONE);
+    addEEnumLiteral(cmitigationEEnum, Cmitigation.UNSPECIFIED);
+
+    initEEnum(imitigationEEnum, Imitigation.class, "Imitigation");
+    addEEnumLiteral(imitigationEEnum, Imitigation.SERIALIZABLE);
+    addEEnumLiteral(imitigationEEnum, Imitigation.PORTABLE_LEVEL);
+    addEEnumLiteral(imitigationEEnum, Imitigation.NONE);
+    addEEnumLiteral(imitigationEEnum, Imitigation.UNSPECIFIED);
+
+    initEEnum(dmitigationEEnum, Dmitigation.class, "Dmitigation");
+    addEEnumLiteral(dmitigationEEnum, Dmitigation.NO_LOSS);
+    addEEnumLiteral(dmitigationEEnum, Dmitigation.PARTIAL_LOSS_ALLOWED);
+    addEEnumLiteral(dmitigationEEnum, Dmitigation.NONE);
+    addEEnumLiteral(dmitigationEEnum, Dmitigation.UNSPECIFIED);
+
+    // Create resource
+    createResource(eNS_URI);
+  }
+
+} //FlaDslPackageImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/InFailureExprImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/InFailureExprImpl.java
new file mode 100644
index 0000000..5474b94
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/InFailureExprImpl.java
@@ -0,0 +1,167 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.polarsys.chess.xtext.flaDsl.Definitions;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.InFailureExpr;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>In Failure Expr</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.InFailureExprImpl#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class InFailureExprImpl extends MinimalEObjectImpl.Container implements InFailureExpr
+{
+  /**
+   * The cached value of the '{@link #getFailures() <em>Failures</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFailures()
+   * @generated
+   * @ordered
+   */
+  protected EList<Definitions> failures;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected InFailureExprImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.IN_FAILURE_EXPR;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Definitions> getFailures()
+  {
+    if (failures == null)
+    {
+      failures = new EObjectContainmentEList<Definitions>(Definitions.class, this, FlaDslPackage.IN_FAILURE_EXPR__FAILURES);
+    }
+    return failures;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.IN_FAILURE_EXPR__FAILURES:
+        return ((InternalEList<?>)getFailures()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.IN_FAILURE_EXPR__FAILURES:
+        return getFailures();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.IN_FAILURE_EXPR__FAILURES:
+        getFailures().clear();
+        getFailures().addAll((Collection<? extends Definitions>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.IN_FAILURE_EXPR__FAILURES:
+        getFailures().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.IN_FAILURE_EXPR__FAILURES:
+        return failures != null && !failures.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //InFailureExprImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/InputExpressionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/InputExpressionImpl.java
new file mode 100644
index 0000000..bd85868
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/InputExpressionImpl.java
@@ -0,0 +1,261 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.uml2.uml.Port;
+
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.InFailureExpr;
+import org.polarsys.chess.xtext.flaDsl.InputExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Input Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.InputExpressionImpl#getRef <em>Ref</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.InputExpressionImpl#getFailureExpr <em>Failure Expr</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class InputExpressionImpl extends MinimalEObjectImpl.Container implements InputExpression
+{
+  /**
+   * The cached value of the '{@link #getRef() <em>Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRef()
+   * @generated
+   * @ordered
+   */
+  protected Port ref;
+
+  /**
+   * The cached value of the '{@link #getFailureExpr() <em>Failure Expr</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFailureExpr()
+   * @generated
+   * @ordered
+   */
+  protected InFailureExpr failureExpr;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected InputExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.INPUT_EXPRESSION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Port getRef()
+  {
+    if (ref != null && ref.eIsProxy())
+    {
+      InternalEObject oldRef = (InternalEObject)ref;
+      ref = (Port)eResolveProxy(oldRef);
+      if (ref != oldRef)
+      {
+        if (eNotificationRequired())
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, FlaDslPackage.INPUT_EXPRESSION__REF, oldRef, ref));
+      }
+    }
+    return ref;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Port basicGetRef()
+  {
+    return ref;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRef(Port newRef)
+  {
+    Port oldRef = ref;
+    ref = newRef;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.INPUT_EXPRESSION__REF, oldRef, ref));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public InFailureExpr getFailureExpr()
+  {
+    return failureExpr;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetFailureExpr(InFailureExpr newFailureExpr, NotificationChain msgs)
+  {
+    InFailureExpr oldFailureExpr = failureExpr;
+    failureExpr = newFailureExpr;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR, oldFailureExpr, newFailureExpr);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setFailureExpr(InFailureExpr newFailureExpr)
+  {
+    if (newFailureExpr != failureExpr)
+    {
+      NotificationChain msgs = null;
+      if (failureExpr != null)
+        msgs = ((InternalEObject)failureExpr).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR, null, msgs);
+      if (newFailureExpr != null)
+        msgs = ((InternalEObject)newFailureExpr).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR, null, msgs);
+      msgs = basicSetFailureExpr(newFailureExpr, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR, newFailureExpr, newFailureExpr));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR:
+        return basicSetFailureExpr(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.INPUT_EXPRESSION__REF:
+        if (resolve) return getRef();
+        return basicGetRef();
+      case FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR:
+        return getFailureExpr();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.INPUT_EXPRESSION__REF:
+        setRef((Port)newValue);
+        return;
+      case FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR:
+        setFailureExpr((InFailureExpr)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.INPUT_EXPRESSION__REF:
+        setRef((Port)null);
+        return;
+      case FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR:
+        setFailureExpr((InFailureExpr)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.INPUT_EXPRESSION__REF:
+        return ref != null;
+      case FlaDslPackage.INPUT_EXPRESSION__FAILURE_EXPR:
+        return failureExpr != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //InputExpressionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/LhsImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/LhsImpl.java
new file mode 100644
index 0000000..6486299
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/LhsImpl.java
@@ -0,0 +1,167 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.InputExpression;
+import org.polarsys.chess.xtext.flaDsl.Lhs;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Lhs</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.LhsImpl#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class LhsImpl extends MinimalEObjectImpl.Container implements Lhs
+{
+  /**
+   * The cached value of the '{@link #getFailures() <em>Failures</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFailures()
+   * @generated
+   * @ordered
+   */
+  protected EList<InputExpression> failures;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected LhsImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.LHS;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<InputExpression> getFailures()
+  {
+    if (failures == null)
+    {
+      failures = new EObjectContainmentEList<InputExpression>(InputExpression.class, this, FlaDslPackage.LHS__FAILURES);
+    }
+    return failures;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.LHS__FAILURES:
+        return ((InternalEList<?>)getFailures()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.LHS__FAILURES:
+        return getFailures();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.LHS__FAILURES:
+        getFailures().clear();
+        getFailures().addAll((Collection<? extends InputExpression>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.LHS__FAILURES:
+        getFailures().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.LHS__FAILURES:
+        return failures != null && !failures.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //LhsImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/NoFailureDefinitionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/NoFailureDefinitionImpl.java
new file mode 100644
index 0000000..6f0455c
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/NoFailureDefinitionImpl.java
@@ -0,0 +1,193 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.polarsys.chess.xtext.flaDsl.ACIDMitigation;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.NoFailureDefinition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>No Failure Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.NoFailureDefinitionImpl#getAcidMitigation <em>Acid Mitigation</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class NoFailureDefinitionImpl extends DefinitionsImpl implements NoFailureDefinition
+{
+  /**
+   * The cached value of the '{@link #getAcidMitigation() <em>Acid Mitigation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAcidMitigation()
+   * @generated
+   * @ordered
+   */
+  protected ACIDMitigation acidMitigation;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected NoFailureDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.NO_FAILURE_DEFINITION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ACIDMitigation getAcidMitigation()
+  {
+    return acidMitigation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAcidMitigation(ACIDMitigation newAcidMitigation, NotificationChain msgs)
+  {
+    ACIDMitigation oldAcidMitigation = acidMitigation;
+    acidMitigation = newAcidMitigation;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION, oldAcidMitigation, newAcidMitigation);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAcidMitigation(ACIDMitigation newAcidMitigation)
+  {
+    if (newAcidMitigation != acidMitigation)
+    {
+      NotificationChain msgs = null;
+      if (acidMitigation != null)
+        msgs = ((InternalEObject)acidMitigation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION, null, msgs);
+      if (newAcidMitigation != null)
+        msgs = ((InternalEObject)newAcidMitigation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION, null, msgs);
+      msgs = basicSetAcidMitigation(newAcidMitigation, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION, newAcidMitigation, newAcidMitigation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION:
+        return basicSetAcidMitigation(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION:
+        return getAcidMitigation();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION:
+        setAcidMitigation((ACIDMitigation)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION:
+        setAcidMitigation((ACIDMitigation)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.NO_FAILURE_DEFINITION__ACID_MITIGATION:
+        return acidMitigation != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //NoFailureDefinitionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/OutFailureExprImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/OutFailureExprImpl.java
new file mode 100644
index 0000000..0ae9b3b
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/OutFailureExprImpl.java
@@ -0,0 +1,167 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.polarsys.chess.xtext.flaDsl.Definitions;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.OutFailureExpr;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Out Failure Expr</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.OutFailureExprImpl#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OutFailureExprImpl extends MinimalEObjectImpl.Container implements OutFailureExpr
+{
+  /**
+   * The cached value of the '{@link #getFailures() <em>Failures</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFailures()
+   * @generated
+   * @ordered
+   */
+  protected EList<Definitions> failures;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected OutFailureExprImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.OUT_FAILURE_EXPR;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Definitions> getFailures()
+  {
+    if (failures == null)
+    {
+      failures = new EObjectContainmentEList<Definitions>(Definitions.class, this, FlaDslPackage.OUT_FAILURE_EXPR__FAILURES);
+    }
+    return failures;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUT_FAILURE_EXPR__FAILURES:
+        return ((InternalEList<?>)getFailures()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUT_FAILURE_EXPR__FAILURES:
+        return getFailures();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUT_FAILURE_EXPR__FAILURES:
+        getFailures().clear();
+        getFailures().addAll((Collection<? extends Definitions>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUT_FAILURE_EXPR__FAILURES:
+        getFailures().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUT_FAILURE_EXPR__FAILURES:
+        return failures != null && !failures.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //OutFailureExprImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/OutputExpressionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/OutputExpressionImpl.java
new file mode 100644
index 0000000..53627ed
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/OutputExpressionImpl.java
@@ -0,0 +1,261 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.uml2.uml.Port;
+
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.OutFailureExpr;
+import org.polarsys.chess.xtext.flaDsl.OutputExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Output Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.OutputExpressionImpl#getRef <em>Ref</em>}</li>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.OutputExpressionImpl#getFailureExpr <em>Failure Expr</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OutputExpressionImpl extends MinimalEObjectImpl.Container implements OutputExpression
+{
+  /**
+   * The cached value of the '{@link #getRef() <em>Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRef()
+   * @generated
+   * @ordered
+   */
+  protected Port ref;
+
+  /**
+   * The cached value of the '{@link #getFailureExpr() <em>Failure Expr</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFailureExpr()
+   * @generated
+   * @ordered
+   */
+  protected OutFailureExpr failureExpr;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected OutputExpressionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.OUTPUT_EXPRESSION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Port getRef()
+  {
+    if (ref != null && ref.eIsProxy())
+    {
+      InternalEObject oldRef = (InternalEObject)ref;
+      ref = (Port)eResolveProxy(oldRef);
+      if (ref != oldRef)
+      {
+        if (eNotificationRequired())
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, FlaDslPackage.OUTPUT_EXPRESSION__REF, oldRef, ref));
+      }
+    }
+    return ref;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Port basicGetRef()
+  {
+    return ref;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRef(Port newRef)
+  {
+    Port oldRef = ref;
+    ref = newRef;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.OUTPUT_EXPRESSION__REF, oldRef, ref));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public OutFailureExpr getFailureExpr()
+  {
+    return failureExpr;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetFailureExpr(OutFailureExpr newFailureExpr, NotificationChain msgs)
+  {
+    OutFailureExpr oldFailureExpr = failureExpr;
+    failureExpr = newFailureExpr;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR, oldFailureExpr, newFailureExpr);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setFailureExpr(OutFailureExpr newFailureExpr)
+  {
+    if (newFailureExpr != failureExpr)
+    {
+      NotificationChain msgs = null;
+      if (failureExpr != null)
+        msgs = ((InternalEObject)failureExpr).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR, null, msgs);
+      if (newFailureExpr != null)
+        msgs = ((InternalEObject)newFailureExpr).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR, null, msgs);
+      msgs = basicSetFailureExpr(newFailureExpr, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR, newFailureExpr, newFailureExpr));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR:
+        return basicSetFailureExpr(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUTPUT_EXPRESSION__REF:
+        if (resolve) return getRef();
+        return basicGetRef();
+      case FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR:
+        return getFailureExpr();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUTPUT_EXPRESSION__REF:
+        setRef((Port)newValue);
+        return;
+      case FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR:
+        setFailureExpr((OutFailureExpr)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUTPUT_EXPRESSION__REF:
+        setRef((Port)null);
+        return;
+      case FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR:
+        setFailureExpr((OutFailureExpr)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.OUTPUT_EXPRESSION__REF:
+        return ref != null;
+      case FlaDslPackage.OUTPUT_EXPRESSION__FAILURE_EXPR:
+        return failureExpr != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //OutputExpressionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/RhsImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/RhsImpl.java
new file mode 100644
index 0000000..dbfaf4d
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/RhsImpl.java
@@ -0,0 +1,167 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.OutputExpression;
+import org.polarsys.chess.xtext.flaDsl.Rhs;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Rhs</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.RhsImpl#getFailures <em>Failures</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class RhsImpl extends MinimalEObjectImpl.Container implements Rhs
+{
+  /**
+   * The cached value of the '{@link #getFailures() <em>Failures</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getFailures()
+   * @generated
+   * @ordered
+   */
+  protected EList<OutputExpression> failures;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected RhsImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.RHS;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<OutputExpression> getFailures()
+  {
+    if (failures == null)
+    {
+      failures = new EObjectContainmentEList<OutputExpression>(OutputExpression.class, this, FlaDslPackage.RHS__FAILURES);
+    }
+    return failures;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.RHS__FAILURES:
+        return ((InternalEList<?>)getFailures()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.RHS__FAILURES:
+        return getFailures();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.RHS__FAILURES:
+        getFailures().clear();
+        getFailures().addAll((Collection<? extends OutputExpression>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.RHS__FAILURES:
+        getFailures().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.RHS__FAILURES:
+        return failures != null && !failures.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //RhsImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/VariableDefinitionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/VariableDefinitionImpl.java
new file mode 100644
index 0000000..df7d5fb
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/VariableDefinitionImpl.java
@@ -0,0 +1,176 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.VariableDefinition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Variable Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.polarsys.chess.xtext.flaDsl.impl.VariableDefinitionImpl#getVariableName <em>Variable Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class VariableDefinitionImpl extends DefinitionsImpl implements VariableDefinition
+{
+  /**
+   * The default value of the '{@link #getVariableName() <em>Variable Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getVariableName()
+   * @generated
+   * @ordered
+   */
+  protected static final String VARIABLE_NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getVariableName() <em>Variable Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getVariableName()
+   * @generated
+   * @ordered
+   */
+  protected String variableName = VARIABLE_NAME_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected VariableDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.VARIABLE_DEFINITION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getVariableName()
+  {
+    return variableName;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setVariableName(String newVariableName)
+  {
+    String oldVariableName = variableName;
+    variableName = newVariableName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, FlaDslPackage.VARIABLE_DEFINITION__VARIABLE_NAME, oldVariableName, variableName));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.VARIABLE_DEFINITION__VARIABLE_NAME:
+        return getVariableName();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.VARIABLE_DEFINITION__VARIABLE_NAME:
+        setVariableName((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.VARIABLE_DEFINITION__VARIABLE_NAME:
+        setVariableName(VARIABLE_NAME_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case FlaDslPackage.VARIABLE_DEFINITION__VARIABLE_NAME:
+        return VARIABLE_NAME_EDEFAULT == null ? variableName != null : !VARIABLE_NAME_EDEFAULT.equals(variableName);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (variableName: ");
+    result.append(variableName);
+    result.append(')');
+    return result.toString();
+  }
+
+} //VariableDefinitionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/WildcardDefinitionImpl.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/WildcardDefinitionImpl.java
new file mode 100644
index 0000000..352a227
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/impl/WildcardDefinitionImpl.java
@@ -0,0 +1,40 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.WildcardDefinition;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Wildcard Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class WildcardDefinitionImpl extends DefinitionsImpl implements WildcardDefinition
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected WildcardDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return FlaDslPackage.Literals.WILDCARD_DEFINITION;
+  }
+
+} //WildcardDefinitionImpl
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/util/FlaDslAdapterFactory.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/util/FlaDslAdapterFactory.java
new file mode 100644
index 0000000..0ec323c
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/util/FlaDslAdapterFactory.java
@@ -0,0 +1,432 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.polarsys.chess.xtext.flaDsl.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage
+ * @generated
+ */
+public class FlaDslAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static FlaDslPackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FlaDslAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = FlaDslPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * Returns whether this factory is applicable for the type of the object.
+   * <!-- begin-user-doc -->
+   * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+   * <!-- end-user-doc -->
+   * @return whether this factory is applicable for the type of the object.
+   * @generated
+   */
+  @Override
+  public boolean isFactoryForType(Object object)
+  {
+    if (object == modelPackage)
+    {
+      return true;
+    }
+    if (object instanceof EObject)
+    {
+      return ((EObject)object).eClass().getEPackage() == modelPackage;
+    }
+    return false;
+  }
+
+  /**
+   * The switch that delegates to the <code>createXXX</code> methods.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected FlaDslSwitch<Adapter> modelSwitch =
+    new FlaDslSwitch<Adapter>()
+    {
+      @Override
+      public Adapter caseBehaviour(Behaviour object)
+      {
+        return createBehaviourAdapter();
+      }
+      @Override
+      public Adapter caseExpression(Expression object)
+      {
+        return createExpressionAdapter();
+      }
+      @Override
+      public Adapter caseLhs(Lhs object)
+      {
+        return createLhsAdapter();
+      }
+      @Override
+      public Adapter caseRhs(Rhs object)
+      {
+        return createRhsAdapter();
+      }
+      @Override
+      public Adapter caseInputExpression(InputExpression object)
+      {
+        return createInputExpressionAdapter();
+      }
+      @Override
+      public Adapter caseOutputExpression(OutputExpression object)
+      {
+        return createOutputExpressionAdapter();
+      }
+      @Override
+      public Adapter caseInFailureExpr(InFailureExpr object)
+      {
+        return createInFailureExprAdapter();
+      }
+      @Override
+      public Adapter caseOutFailureExpr(OutFailureExpr object)
+      {
+        return createOutFailureExprAdapter();
+      }
+      @Override
+      public Adapter caseDefinitions(Definitions object)
+      {
+        return createDefinitionsAdapter();
+      }
+      @Override
+      public Adapter caseFailureDefinition(FailureDefinition object)
+      {
+        return createFailureDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseNoFailureDefinition(NoFailureDefinition object)
+      {
+        return createNoFailureDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseComplexNofailureDefinition(ComplexNofailureDefinition object)
+      {
+        return createComplexNofailureDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseWildcardDefinition(WildcardDefinition object)
+      {
+        return createWildcardDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseVariableDefinition(VariableDefinition object)
+      {
+        return createVariableDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseACIDavoidable(ACIDavoidable object)
+      {
+        return createACIDavoidableAdapter();
+      }
+      @Override
+      public Adapter caseACIDMitigation(ACIDMitigation object)
+      {
+        return createACIDMitigationAdapter();
+      }
+      @Override
+      public Adapter defaultCase(EObject object)
+      {
+        return createEObjectAdapter();
+      }
+    };
+
+  /**
+   * Creates an adapter for the <code>target</code>.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param target the object to adapt.
+   * @return the adapter for the <code>target</code>.
+   * @generated
+   */
+  @Override
+  public Adapter createAdapter(Notifier target)
+  {
+    return modelSwitch.doSwitch((EObject)target);
+  }
+
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.Behaviour <em>Behaviour</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.Behaviour
+   * @generated
+   */
+  public Adapter createBehaviourAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.Expression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.Expression
+   * @generated
+   */
+  public Adapter createExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.Lhs <em>Lhs</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.Lhs
+   * @generated
+   */
+  public Adapter createLhsAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.Rhs <em>Rhs</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.Rhs
+   * @generated
+   */
+  public Adapter createRhsAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.InputExpression <em>Input Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.InputExpression
+   * @generated
+   */
+  public Adapter createInputExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.OutputExpression <em>Output Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.OutputExpression
+   * @generated
+   */
+  public Adapter createOutputExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.InFailureExpr <em>In Failure Expr</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.InFailureExpr
+   * @generated
+   */
+  public Adapter createInFailureExprAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.OutFailureExpr <em>Out Failure Expr</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.OutFailureExpr
+   * @generated
+   */
+  public Adapter createOutFailureExprAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.Definitions <em>Definitions</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.Definitions
+   * @generated
+   */
+  public Adapter createDefinitionsAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.FailureDefinition <em>Failure Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.FailureDefinition
+   * @generated
+   */
+  public Adapter createFailureDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.NoFailureDefinition <em>No Failure Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.NoFailureDefinition
+   * @generated
+   */
+  public Adapter createNoFailureDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.ComplexNofailureDefinition <em>Complex Nofailure Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.ComplexNofailureDefinition
+   * @generated
+   */
+  public Adapter createComplexNofailureDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.WildcardDefinition <em>Wildcard Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.WildcardDefinition
+   * @generated
+   */
+  public Adapter createWildcardDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.VariableDefinition <em>Variable Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.VariableDefinition
+   * @generated
+   */
+  public Adapter createVariableDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.ACIDavoidable <em>ACI Davoidable</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDavoidable
+   * @generated
+   */
+  public Adapter createACIDavoidableAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.polarsys.chess.xtext.flaDsl.ACIDMitigation <em>ACID Mitigation</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.polarsys.chess.xtext.flaDsl.ACIDMitigation
+   * @generated
+   */
+  public Adapter createACIDMitigationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for the default case.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @generated
+   */
+  public Adapter createEObjectAdapter()
+  {
+    return null;
+  }
+
+} //FlaDslAdapterFactory
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/util/FlaDslSwitch.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/util/FlaDslSwitch.java
new file mode 100644
index 0000000..c1b0a58
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/flaDsl/util/FlaDslSwitch.java
@@ -0,0 +1,470 @@
+/**
+ */
+package org.polarsys.chess.xtext.flaDsl.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.polarsys.chess.xtext.flaDsl.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.polarsys.chess.xtext.flaDsl.FlaDslPackage
+ * @generated
+ */
+public class FlaDslSwitch<T> extends Switch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static FlaDslPackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FlaDslSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = FlaDslPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * Checks whether this is a switch for the given package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param ePackage the package in question.
+   * @return whether this is a switch for the given package.
+   * @generated
+   */
+  @Override
+  protected boolean isSwitchFor(EPackage ePackage)
+  {
+    return ePackage == modelPackage;
+  }
+
+  /**
+   * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the first non-null result returned by a <code>caseXXX</code> call.
+   * @generated
+   */
+  @Override
+  protected T doSwitch(int classifierID, EObject theEObject)
+  {
+    switch (classifierID)
+    {
+      case FlaDslPackage.BEHAVIOUR:
+      {
+        Behaviour behaviour = (Behaviour)theEObject;
+        T result = caseBehaviour(behaviour);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.EXPRESSION:
+      {
+        Expression expression = (Expression)theEObject;
+        T result = caseExpression(expression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.LHS:
+      {
+        Lhs lhs = (Lhs)theEObject;
+        T result = caseLhs(lhs);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.RHS:
+      {
+        Rhs rhs = (Rhs)theEObject;
+        T result = caseRhs(rhs);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.INPUT_EXPRESSION:
+      {
+        InputExpression inputExpression = (InputExpression)theEObject;
+        T result = caseInputExpression(inputExpression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.OUTPUT_EXPRESSION:
+      {
+        OutputExpression outputExpression = (OutputExpression)theEObject;
+        T result = caseOutputExpression(outputExpression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.IN_FAILURE_EXPR:
+      {
+        InFailureExpr inFailureExpr = (InFailureExpr)theEObject;
+        T result = caseInFailureExpr(inFailureExpr);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.OUT_FAILURE_EXPR:
+      {
+        OutFailureExpr outFailureExpr = (OutFailureExpr)theEObject;
+        T result = caseOutFailureExpr(outFailureExpr);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.DEFINITIONS:
+      {
+        Definitions definitions = (Definitions)theEObject;
+        T result = caseDefinitions(definitions);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.FAILURE_DEFINITION:
+      {
+        FailureDefinition failureDefinition = (FailureDefinition)theEObject;
+        T result = caseFailureDefinition(failureDefinition);
+        if (result == null) result = caseDefinitions(failureDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.NO_FAILURE_DEFINITION:
+      {
+        NoFailureDefinition noFailureDefinition = (NoFailureDefinition)theEObject;
+        T result = caseNoFailureDefinition(noFailureDefinition);
+        if (result == null) result = caseComplexNofailureDefinition(noFailureDefinition);
+        if (result == null) result = caseDefinitions(noFailureDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.COMPLEX_NOFAILURE_DEFINITION:
+      {
+        ComplexNofailureDefinition complexNofailureDefinition = (ComplexNofailureDefinition)theEObject;
+        T result = caseComplexNofailureDefinition(complexNofailureDefinition);
+        if (result == null) result = caseDefinitions(complexNofailureDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.WILDCARD_DEFINITION:
+      {
+        WildcardDefinition wildcardDefinition = (WildcardDefinition)theEObject;
+        T result = caseWildcardDefinition(wildcardDefinition);
+        if (result == null) result = caseDefinitions(wildcardDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.VARIABLE_DEFINITION:
+      {
+        VariableDefinition variableDefinition = (VariableDefinition)theEObject;
+        T result = caseVariableDefinition(variableDefinition);
+        if (result == null) result = caseDefinitions(variableDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.ACI_DAVOIDABLE:
+      {
+        ACIDavoidable aciDavoidable = (ACIDavoidable)theEObject;
+        T result = caseACIDavoidable(aciDavoidable);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case FlaDslPackage.ACID_MITIGATION:
+      {
+        ACIDMitigation acidMitigation = (ACIDMitigation)theEObject;
+        T result = caseACIDMitigation(acidMitigation);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      default: return defaultCase(theEObject);
+    }
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Behaviour</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Behaviour</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBehaviour(Behaviour object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Expression</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseExpression(Expression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Lhs</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Lhs</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseLhs(Lhs object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Rhs</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Rhs</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseRhs(Rhs object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Input Expression</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Input Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseInputExpression(InputExpression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Output Expression</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Output Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseOutputExpression(OutputExpression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>In Failure Expr</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>In Failure Expr</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseInFailureExpr(InFailureExpr object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Out Failure Expr</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Out Failure Expr</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseOutFailureExpr(OutFailureExpr object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Definitions</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Definitions</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseDefinitions(Definitions object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Failure Definition</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Failure Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseFailureDefinition(FailureDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>No Failure Definition</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>No Failure Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseNoFailureDefinition(NoFailureDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Complex Nofailure Definition</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Complex Nofailure Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseComplexNofailureDefinition(ComplexNofailureDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Wildcard Definition</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Wildcard Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseWildcardDefinition(WildcardDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Variable Definition</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Variable Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseVariableDefinition(VariableDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>ACI Davoidable</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>ACI Davoidable</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseACIDavoidable(ACIDavoidable object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>ACID Mitigation</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>ACID Mitigation</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseACIDMitigation(ACIDMitigation object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch, but this is the last case anyway.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+   * @generated
+   */
+  @Override
+  public T defaultCase(EObject object)
+  {
+    return null;
+  }
+
+} //FlaDslSwitch
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/FlaDslAntlrTokenFileProvider.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/FlaDslAntlrTokenFileProvider.java
new file mode 100644
index 0000000..df0e137
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/FlaDslAntlrTokenFileProvider.java
@@ -0,0 +1,16 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class FlaDslAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	@Override
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.tokens");
+	}
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/FlaDslParser.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/FlaDslParser.java
new file mode 100644
index 0000000..0bd9883
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/FlaDslParser.java
@@ -0,0 +1,39 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.parser.antlr;
+
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+public class FlaDslParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject
+	private FlaDslGrammarAccess grammarAccess;
+	
+	@Override
+	protected void setInitialHiddenTokens(XtextTokenStream tokenStream) {
+		tokenStream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+	}
+	
+	@Override
+	protected org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslParser createParser(XtextTokenStream stream) {
+		return new org.polarsys.chess.xtext.parser.antlr.internal.InternalFlaDslParser(stream, getGrammarAccess());
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "Behaviour";
+	}
+	
+	public FlaDslGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(FlaDslGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+	
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.g b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.g
new file mode 100644
index 0000000..b0b1b62
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.g
@@ -0,0 +1,1437 @@
+/*
+ * generated by Xtext
+ */
+grammar InternalFlaDsl;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+	
+}
+
+@lexer::header {
+package org.polarsys.chess.xtext.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+}
+
+@parser::header {
+package org.polarsys.chess.xtext.parser.antlr.internal; 
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private FlaDslGrammarAccess grammarAccess;
+ 	
+    public InternalFlaDslParser(TokenStream input, FlaDslGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "Behaviour";	
+   	}
+   	
+   	@Override
+   	protected FlaDslGrammarAccess getGrammarAccess() {
+   		return grammarAccess;
+   	}
+}
+
+@rulecatch { 
+    catch (RecognitionException re) { 
+        recover(input,re); 
+        appendSkippedTokens();
+    } 
+}
+
+
+
+
+// Entry rule entryRuleBehaviour
+entryRuleBehaviour returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getBehaviourRule()); }
+	 iv_ruleBehaviour=ruleBehaviour 
+	 { $current=$iv_ruleBehaviour.current; } 
+	 EOF 
+;
+
+// Rule Behaviour
+ruleBehaviour returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBehaviourAccess().getRulesExpressionParserRuleCall_0()); 
+	    }
+		lv_rules_0_0=ruleExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBehaviourRule());
+	        }
+       		add(
+       			$current, 
+       			"rules",
+        		lv_rules_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Expression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)+
+;
+
+
+
+
+
+// Entry rule entryRuleExpression
+entryRuleExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getExpressionRule()); }
+	 iv_ruleExpression=ruleExpression 
+	 { $current=$iv_ruleExpression.current; } 
+	 EOF 
+;
+
+// Rule Expression
+ruleExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='FLA:' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getExpressionAccess().getFLAKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0()); 
+	    }
+		lv_lhs_1_0=ruleLhs		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"lhs",
+        		lv_lhs_1_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Lhs");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='->' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getExpressionAccess().getHyphenMinusGreaterThanSignKeyword_2());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0()); 
+	    }
+		lv_rhs_3_0=ruleRhs		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"rhs",
+        		lv_rhs_3_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Rhs");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_4=';' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getExpressionAccess().getSemicolonKeyword_4());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleLhs
+entryRuleLhs returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getLhsRule()); }
+	 iv_ruleLhs=ruleLhs 
+	 { $current=$iv_ruleLhs.current; } 
+	 EOF 
+;
+
+// Rule Lhs
+ruleLhs returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_0_0()); 
+	    }
+		lv_failures_0_0=ruleInputExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getLhsRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.InputExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_1=',' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getLhsAccess().getCommaKeyword_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_1_1_0()); 
+	    }
+		lv_failures_2_0=ruleInputExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getLhsRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_2_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.InputExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleRhs
+entryRuleRhs returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRhsRule()); }
+	 iv_ruleRhs=ruleRhs 
+	 { $current=$iv_ruleRhs.current; } 
+	 EOF 
+;
+
+// Rule Rhs
+ruleRhs returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_0_0()); 
+	    }
+		lv_failures_0_0=ruleOutputExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRhsRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.OutputExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_1=',' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getRhsAccess().getCommaKeyword_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_1_1_0()); 
+	    }
+		lv_failures_2_0=ruleOutputExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRhsRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_2_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.OutputExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleInputExpression
+entryRuleInputExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getInputExpressionRule()); }
+	 iv_ruleInputExpression=ruleInputExpression 
+	 { $current=$iv_ruleInputExpression.current; } 
+	 EOF 
+;
+
+// Rule InputExpression
+ruleInputExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getInputExpressionRule());
+	        }
+        }
+	otherlv_0=RULE_ID
+	{
+		newLeafNode(otherlv_0, grammarAccess.getInputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+	}
+
+)
+)
+    |	otherlv_1='undefined' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getInputExpressionAccess().getUndefinedKeyword_0_1());
+    }
+)	otherlv_2='.' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getInputExpressionAccess().getFullStopKeyword_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInputExpressionAccess().getFailureExprInFailureExprParserRuleCall_2_0()); 
+	    }
+		lv_failureExpr_3_0=ruleInFailureExpr		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInputExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"failureExpr",
+        		lv_failureExpr_3_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.InFailureExpr");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleOutputExpression
+entryRuleOutputExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getOutputExpressionRule()); }
+	 iv_ruleOutputExpression=ruleOutputExpression 
+	 { $current=$iv_ruleOutputExpression.current; } 
+	 EOF 
+;
+
+// Rule OutputExpression
+ruleOutputExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getOutputExpressionRule());
+	        }
+        }
+	otherlv_0=RULE_ID
+	{
+		newLeafNode(otherlv_0, grammarAccess.getOutputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+	}
+
+)
+)
+    |	otherlv_1='undefined' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getOutputExpressionAccess().getUndefinedKeyword_0_1());
+    }
+)	otherlv_2='.' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getOutputExpressionAccess().getFullStopKeyword_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutputExpressionAccess().getFailureExprOutFailureExprParserRuleCall_2_0()); 
+	    }
+		lv_failureExpr_3_0=ruleOutFailureExpr		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutputExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"failureExpr",
+        		lv_failureExpr_3_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.OutFailureExpr");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleInFailureExpr
+entryRuleInFailureExpr returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getInFailureExprRule()); }
+	 iv_ruleInFailureExpr=ruleInFailureExpr 
+	 { $current=$iv_ruleInFailureExpr.current; } 
+	 EOF 
+;
+
+// Rule InFailureExpr
+ruleInFailureExpr returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresWildcardDefinitionParserRuleCall_0_0()); 
+	    }
+		lv_failures_0_0=ruleWildcardDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.WildcardDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_1_0()); 
+	    }
+		lv_failures_1_0=ruleNoFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_1_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.NoFailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+	    }
+		lv_failures_2_0=ruleFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_2_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(	otherlv_3='{' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getInFailureExprAccess().getLeftCurlyBracketKeyword_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+	    }
+		lv_failures_4_0=ruleFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_4_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_5=',' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getInFailureExprAccess().getCommaKeyword_3_2_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+	    }
+		lv_failures_6_0=ruleFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_6_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))+	otherlv_7='}' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getInFailureExprAccess().getRightCurlyBracketKeyword_3_3());
+    }
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+	    }
+		lv_failures_8_0=ruleVariableDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_8_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.VariableDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleOutFailureExpr
+entryRuleOutFailureExpr returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getOutFailureExprRule()); }
+	 iv_ruleOutFailureExpr=ruleOutFailureExpr 
+	 { $current=$iv_ruleOutFailureExpr.current; } 
+	 EOF 
+;
+
+// Rule OutFailureExpr
+ruleOutFailureExpr returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_0_0()); 
+	    }
+		lv_failures_0_0=ruleNoFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.NoFailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresComplexNofailureDefinitionParserRuleCall_1_0()); 
+	    }
+		lv_failures_1_0=ruleComplexNofailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_1_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.ComplexNofailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+	    }
+		lv_failures_2_0=ruleFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_2_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(	otherlv_3='{' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getOutFailureExprAccess().getLeftCurlyBracketKeyword_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+	    }
+		lv_failures_4_0=ruleFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_4_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_5=',' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getOutFailureExprAccess().getCommaKeyword_3_2_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+	    }
+		lv_failures_6_0=ruleFailureDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_6_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))+	otherlv_7='}' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getOutFailureExprAccess().getRightCurlyBracketKeyword_3_3());
+    }
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+	    }
+		lv_failures_8_0=ruleVariableDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+	        }
+       		add(
+       			$current, 
+       			"failures",
+        		lv_failures_8_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.VariableDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+
+
+// Entry rule entryRuleFailureDefinition
+entryRuleFailureDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getFailureDefinitionRule()); }
+	 iv_ruleFailureDefinition=ruleFailureDefinition 
+	 { $current=$iv_ruleFailureDefinition.current; } 
+	 EOF 
+;
+
+// Rule FailureDefinition
+ruleFailureDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getFailureDefinitionAccess().getFailureDefinitionAction_0(),
+            $current);
+    }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFailureDefinitionAccess().getTypeActualFailureTypeEnumRuleCall_1_0()); 
+	    }
+		lv_type_1_0=ruleActualFailureType		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFailureDefinitionRule());
+	        }
+       		set(
+       			$current, 
+       			"type",
+        		lv_type_1_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.ActualFailureType");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_2='.' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getFailureDefinitionAccess().getFullStopKeyword_2_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableACIDavoidableParserRuleCall_2_1_0()); 
+	    }
+		lv_acidAvoidable_3_0=ruleACIDavoidable		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFailureDefinitionRule());
+	        }
+       		set(
+       			$current, 
+       			"acidAvoidable",
+        		lv_acidAvoidable_3_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.ACIDavoidable");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+// Entry rule entryRuleNoFailureDefinition
+entryRuleNoFailureDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getNoFailureDefinitionRule()); }
+	 iv_ruleNoFailureDefinition=ruleNoFailureDefinition 
+	 { $current=$iv_ruleNoFailureDefinition.current; } 
+	 EOF 
+;
+
+// Rule NoFailureDefinition
+ruleNoFailureDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getNoFailureDefinitionAccess().getNoFailureDefinitionAction_0(),
+            $current);
+    }
+)	otherlv_1='noFailure' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getNoFailureDefinitionAccess().getNoFailureKeyword_1());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleComplexNofailureDefinition
+entryRuleComplexNofailureDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getComplexNofailureDefinitionRule()); }
+	 iv_ruleComplexNofailureDefinition=ruleComplexNofailureDefinition 
+	 { $current=$iv_ruleComplexNofailureDefinition.current; } 
+	 EOF 
+;
+
+// Rule ComplexNofailureDefinition
+ruleComplexNofailureDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureDefinitionAction_0(),
+            $current);
+    }
+)	otherlv_1='noFailure' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureKeyword_1());
+    }
+	otherlv_2='.' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getComplexNofailureDefinitionAccess().getFullStopKeyword_2());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0()); 
+	    }
+		lv_acidMitigation_3_0=ruleACIDMitigation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComplexNofailureDefinitionRule());
+	        }
+       		set(
+       			$current, 
+       			"acidMitigation",
+        		lv_acidMitigation_3_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.ACIDMitigation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleWildcardDefinition
+entryRuleWildcardDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getWildcardDefinitionRule()); }
+	 iv_ruleWildcardDefinition=ruleWildcardDefinition 
+	 { $current=$iv_ruleWildcardDefinition.current; } 
+	 EOF 
+;
+
+// Rule WildcardDefinition
+ruleWildcardDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getWildcardDefinitionAccess().getWildcardDefinitionAction_0(),
+            $current);
+    }
+)	otherlv_1='wildcard' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getWildcardDefinitionAccess().getWildcardKeyword_1());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleVariableDefinition
+entryRuleVariableDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getVariableDefinitionRule()); }
+	 iv_ruleVariableDefinition=ruleVariableDefinition 
+	 { $current=$iv_ruleVariableDefinition.current; } 
+	 EOF 
+;
+
+// Rule VariableDefinition
+ruleVariableDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getVariableDefinitionAccess().getVariableDefinitionAction_0(),
+            $current);
+    }
+)(
+(
+		lv_variableName_1_0=RULE_ID
+		{
+			newLeafNode(lv_variableName_1_0, grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getVariableDefinitionRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"variableName",
+        		lv_variableName_1_0, 
+        		"org.eclipse.xtext.common.Terminals.ID");
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleACIDavoidable
+entryRuleACIDavoidable returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getACIDavoidableRule()); }
+	 iv_ruleACIDavoidable=ruleACIDavoidable 
+	 { $current=$iv_ruleACIDavoidable.current; } 
+	 EOF 
+;
+
+// Rule ACIDavoidable
+ruleACIDavoidable returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0()); 
+	    }
+		lv_a_0_0=ruleAavoidable		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+	        }
+       		set(
+       			$current, 
+       			"a",
+        		lv_a_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Aavoidable");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_1='.' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getACIDavoidableAccess().getFullStopKeyword_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0()); 
+	    }
+		lv_c_2_0=ruleCavoidable		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+	        }
+       		set(
+       			$current, 
+       			"c",
+        		lv_c_2_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Cavoidable");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_3='.' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getACIDavoidableAccess().getFullStopKeyword_3());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0()); 
+	    }
+		lv_i_4_0=ruleIavoidable		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+	        }
+       		set(
+       			$current, 
+       			"i",
+        		lv_i_4_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Iavoidable");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='.' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getACIDavoidableAccess().getFullStopKeyword_5());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0()); 
+	    }
+		lv_d_6_0=ruleDavoidable		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+	        }
+       		set(
+       			$current, 
+       			"d",
+        		lv_d_6_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Davoidable");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleACIDMitigation
+entryRuleACIDMitigation returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getACIDMitigationRule()); }
+	 iv_ruleACIDMitigation=ruleACIDMitigation 
+	 { $current=$iv_ruleACIDMitigation.current; } 
+	 EOF 
+;
+
+// Rule ACIDMitigation
+ruleACIDMitigation returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0()); 
+	    }
+		lv_a_0_0=ruleAmitigation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+	        }
+       		set(
+       			$current, 
+       			"a",
+        		lv_a_0_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Amitigation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_1='.' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getACIDMitigationAccess().getFullStopKeyword_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0()); 
+	    }
+		lv_c_2_0=ruleCmitigation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+	        }
+       		set(
+       			$current, 
+       			"c",
+        		lv_c_2_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Cmitigation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_3='.' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getACIDMitigationAccess().getFullStopKeyword_3());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0()); 
+	    }
+		lv_i_4_0=ruleImitigation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+	        }
+       		set(
+       			$current, 
+       			"i",
+        		lv_i_4_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Imitigation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='.' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getACIDMitigationAccess().getFullStopKeyword_5());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0()); 
+	    }
+		lv_d_6_0=ruleDmitigation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+	        }
+       		set(
+       			$current, 
+       			"d",
+        		lv_d_6_0, 
+        		"org.polarsys.chess.xtext.FlaDsl.Dmitigation");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+
+
+
+
+// Rule ActualFailureType
+ruleActualFailureType returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='early' 
+	{
+        $current = grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='late' 
+	{
+        $current = grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='commission' 
+	{
+        $current = grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2()); 
+    }
+)
+    |(	enumLiteral_3='omission' 
+	{
+        $current = grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3()); 
+    }
+)
+    |(	enumLiteral_4='valueSubtle' 
+	{
+        $current = grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_4, grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4()); 
+    }
+)
+    |(	enumLiteral_5='valueCoarse' 
+	{
+        $current = grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_5, grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5()); 
+    }
+));
+
+
+
+
+
+
+
+// Rule Aavoidable
+ruleAavoidable returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='incompletion' 
+	{
+        $current = grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='none' 
+	{
+        $current = grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='unspecified' 
+	{
+        $current = grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+    }
+));
+
+
+
+// Rule Cavoidable
+ruleCavoidable returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='inconsistency' 
+	{
+        $current = grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='none' 
+	{
+        $current = grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='unspecified' 
+	{
+        $current = grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+    }
+));
+
+
+
+// Rule Iavoidable
+ruleIavoidable returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='interference' 
+	{
+        $current = grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='none' 
+	{
+        $current = grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='unspecified' 
+	{
+        $current = grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+    }
+));
+
+
+
+// Rule Davoidable
+ruleDavoidable returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='impermanence' 
+	{
+        $current = grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='none' 
+	{
+        $current = grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='unspecified' 
+	{
+        $current = grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+    }
+));
+
+
+
+// Rule Amitigation
+ruleAmitigation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='all_or_nothing' 
+	{
+        $current = grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='all_or_compensation' 
+	{
+        $current = grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='none' 
+	{
+        $current = grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+    }
+)
+    |(	enumLiteral_3='unspecified' 
+	{
+        $current = grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+    }
+));
+
+
+
+// Rule Cmitigation
+ruleCmitigation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='full_consistency' 
+	{
+        $current = grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='range_violation_allowed' 
+	{
+        $current = grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='none' 
+	{
+        $current = grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+    }
+)
+    |(	enumLiteral_3='unspecified' 
+	{
+        $current = grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+    }
+));
+
+
+
+// Rule Imitigation
+ruleImitigation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='serializable' 
+	{
+        $current = grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='portable_level' 
+	{
+        $current = grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='none' 
+	{
+        $current = grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+    }
+)
+    |(	enumLiteral_3='unspecified' 
+	{
+        $current = grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+    }
+));
+
+
+
+// Rule Dmitigation
+ruleDmitigation returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='no_loss' 
+	{
+        $current = grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='partial_loss_allowed' 
+	{
+        $current = grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='none' 
+	{
+        $current = grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+    }
+)
+    |(	enumLiteral_3='unspecified' 
+	{
+        $current = grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+    }
+));
+
+
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.tokens b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.tokens
new file mode 100644
index 0000000..9ed7021
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDsl.tokens
@@ -0,0 +1,67 @@
+','=14
+'->'=12
+'.'=16
+';'=13
+'FLA:'=11
+'all_or_compensation'=34
+'all_or_nothing'=33
+'commission'=23
+'early'=21
+'full_consistency'=35
+'impermanence'=32
+'incompletion'=27
+'inconsistency'=30
+'interference'=31
+'late'=22
+'noFailure'=19
+'no_loss'=39
+'none'=28
+'omission'=24
+'partial_loss_allowed'=40
+'portable_level'=38
+'range_violation_allowed'=36
+'serializable'=37
+'undefined'=15
+'unspecified'=29
+'valueCoarse'=26
+'valueSubtle'=25
+'wildcard'=20
+'{'=17
+'}'=18
+RULE_ANY_OTHER=10
+RULE_ID=4
+RULE_INT=5
+RULE_ML_COMMENT=7
+RULE_SL_COMMENT=8
+RULE_STRING=6
+RULE_WS=9
+T__11=11
+T__12=12
+T__13=13
+T__14=14
+T__15=15
+T__16=16
+T__17=17
+T__18=18
+T__19=19
+T__20=20
+T__21=21
+T__22=22
+T__23=23
+T__24=24
+T__25=25
+T__26=26
+T__27=27
+T__28=28
+T__29=29
+T__30=30
+T__31=31
+T__32=32
+T__33=33
+T__34=34
+T__35=35
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+T__40=40
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDslLexer.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDslLexer.java
new file mode 100644
index 0000000..43a9ccc
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDslLexer.java
@@ -0,0 +1,1897 @@
+package org.polarsys.chess.xtext.parser.antlr.internal;
+
+// Hack: Use our own Lexer superclass by means of import. 
+// Currently there is no other way to specify the superclass for the lexer.
+import org.eclipse.xtext.parser.antlr.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalFlaDslLexer extends Lexer {
+    public static final int RULE_STRING=6;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__37=37;
+    public static final int T__16=16;
+    public static final int T__38=38;
+    public static final int T__17=17;
+    public static final int T__39=39;
+    public static final int T__18=18;
+    public static final int T__11=11;
+    public static final int T__33=33;
+    public static final int T__12=12;
+    public static final int T__34=34;
+    public static final int T__13=13;
+    public static final int T__35=35;
+    public static final int T__14=14;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_ID=4;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int RULE_INT=5;
+    public static final int T__29=29;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__40=40;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+    public InternalFlaDslLexer() {;} 
+    public InternalFlaDslLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalFlaDslLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "InternalFlaDsl.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:11:7: ( 'FLA:' )
+            // InternalFlaDsl.g:11:9: 'FLA:'
+            {
+            match("FLA:"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__11"
+
+    // $ANTLR start "T__12"
+    public final void mT__12() throws RecognitionException {
+        try {
+            int _type = T__12;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:12:7: ( '->' )
+            // InternalFlaDsl.g:12:9: '->'
+            {
+            match("->"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__12"
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:13:7: ( ';' )
+            // InternalFlaDsl.g:13:9: ';'
+            {
+            match(';'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__13"
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:14:7: ( ',' )
+            // InternalFlaDsl.g:14:9: ','
+            {
+            match(','); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:15:7: ( 'undefined' )
+            // InternalFlaDsl.g:15:9: 'undefined'
+            {
+            match("undefined"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:16:7: ( '.' )
+            // InternalFlaDsl.g:16:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:17:7: ( '{' )
+            // InternalFlaDsl.g:17:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:18:7: ( '}' )
+            // InternalFlaDsl.g:18:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:19:7: ( 'noFailure' )
+            // InternalFlaDsl.g:19:9: 'noFailure'
+            {
+            match("noFailure"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:20:7: ( 'wildcard' )
+            // InternalFlaDsl.g:20:9: 'wildcard'
+            {
+            match("wildcard"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:21:7: ( 'early' )
+            // InternalFlaDsl.g:21:9: 'early'
+            {
+            match("early"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:22:7: ( 'late' )
+            // InternalFlaDsl.g:22:9: 'late'
+            {
+            match("late"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:23:7: ( 'commission' )
+            // InternalFlaDsl.g:23:9: 'commission'
+            {
+            match("commission"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:24:7: ( 'omission' )
+            // InternalFlaDsl.g:24:9: 'omission'
+            {
+            match("omission"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:25:7: ( 'valueSubtle' )
+            // InternalFlaDsl.g:25:9: 'valueSubtle'
+            {
+            match("valueSubtle"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:26:7: ( 'valueCoarse' )
+            // InternalFlaDsl.g:26:9: 'valueCoarse'
+            {
+            match("valueCoarse"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:27:7: ( 'incompletion' )
+            // InternalFlaDsl.g:27:9: 'incompletion'
+            {
+            match("incompletion"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
+        try {
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:28:7: ( 'none' )
+            // InternalFlaDsl.g:28:9: 'none'
+            {
+            match("none"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__28"
+
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
+        try {
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:29:7: ( 'unspecified' )
+            // InternalFlaDsl.g:29:9: 'unspecified'
+            {
+            match("unspecified"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__29"
+
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:30:7: ( 'inconsistency' )
+            // InternalFlaDsl.g:30:9: 'inconsistency'
+            {
+            match("inconsistency"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:31:7: ( 'interference' )
+            // InternalFlaDsl.g:31:9: 'interference'
+            {
+            match("interference"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:32:7: ( 'impermanence' )
+            // InternalFlaDsl.g:32:9: 'impermanence'
+            {
+            match("impermanence"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:33:7: ( 'all_or_nothing' )
+            // InternalFlaDsl.g:33:9: 'all_or_nothing'
+            {
+            match("all_or_nothing"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:34:7: ( 'all_or_compensation' )
+            // InternalFlaDsl.g:34:9: 'all_or_compensation'
+            {
+            match("all_or_compensation"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "T__35"
+    public final void mT__35() throws RecognitionException {
+        try {
+            int _type = T__35;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:35:7: ( 'full_consistency' )
+            // InternalFlaDsl.g:35:9: 'full_consistency'
+            {
+            match("full_consistency"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__35"
+
+    // $ANTLR start "T__36"
+    public final void mT__36() throws RecognitionException {
+        try {
+            int _type = T__36;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:36:7: ( 'range_violation_allowed' )
+            // InternalFlaDsl.g:36:9: 'range_violation_allowed'
+            {
+            match("range_violation_allowed"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__36"
+
+    // $ANTLR start "T__37"
+    public final void mT__37() throws RecognitionException {
+        try {
+            int _type = T__37;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:37:7: ( 'serializable' )
+            // InternalFlaDsl.g:37:9: 'serializable'
+            {
+            match("serializable"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__37"
+
+    // $ANTLR start "T__38"
+    public final void mT__38() throws RecognitionException {
+        try {
+            int _type = T__38;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:38:7: ( 'portable_level' )
+            // InternalFlaDsl.g:38:9: 'portable_level'
+            {
+            match("portable_level"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__38"
+
+    // $ANTLR start "T__39"
+    public final void mT__39() throws RecognitionException {
+        try {
+            int _type = T__39;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:39:7: ( 'no_loss' )
+            // InternalFlaDsl.g:39:9: 'no_loss'
+            {
+            match("no_loss"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__39"
+
+    // $ANTLR start "T__40"
+    public final void mT__40() throws RecognitionException {
+        try {
+            int _type = T__40;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:40:7: ( 'partial_loss_allowed' )
+            // InternalFlaDsl.g:40:9: 'partial_loss_allowed'
+            {
+            match("partial_loss_allowed"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__40"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1423:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalFlaDsl.g:1423:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // InternalFlaDsl.g:1423:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // InternalFlaDsl.g:1423:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // InternalFlaDsl.g:1423:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='Z')||LA2_0=='_'||(LA2_0>='a' && LA2_0<='z')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // InternalFlaDsl.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1425:10: ( ( '0' .. '9' )+ )
+            // InternalFlaDsl.g:1425:12: ( '0' .. '9' )+
+            {
+            // InternalFlaDsl.g:1425:12: ( '0' .. '9' )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( ((LA3_0>='0' && LA3_0<='9')) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // InternalFlaDsl.g:1425:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1427:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalFlaDsl.g:1427:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // InternalFlaDsl.g:1427:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0=='\"') ) {
+                alt6=1;
+            }
+            else if ( (LA6_0=='\'') ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // InternalFlaDsl.g:1427:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // InternalFlaDsl.g:1427:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop4:
+                    do {
+                        int alt4=3;
+                        int LA4_0 = input.LA(1);
+
+                        if ( (LA4_0=='\\') ) {
+                            alt4=1;
+                        }
+                        else if ( ((LA4_0>='\u0000' && LA4_0<='!')||(LA4_0>='#' && LA4_0<='[')||(LA4_0>=']' && LA4_0<='\uFFFF')) ) {
+                            alt4=2;
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // InternalFlaDsl.g:1427:21: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalFlaDsl.g:1427:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop4;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1427:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // InternalFlaDsl.g:1427:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop5:
+                    do {
+                        int alt5=3;
+                        int LA5_0 = input.LA(1);
+
+                        if ( (LA5_0=='\\') ) {
+                            alt5=1;
+                        }
+                        else if ( ((LA5_0>='\u0000' && LA5_0<='&')||(LA5_0>='(' && LA5_0<='[')||(LA5_0>=']' && LA5_0<='\uFFFF')) ) {
+                            alt5=2;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // InternalFlaDsl.g:1427:54: '\\\\' .
+                    	    {
+                    	    match('\\'); 
+                    	    matchAny(); 
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // InternalFlaDsl.g:1427:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1429:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalFlaDsl.g:1429:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // InternalFlaDsl.g:1429:24: ( options {greedy=false; } : . )*
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( (LA7_0=='*') ) {
+                    int LA7_1 = input.LA(2);
+
+                    if ( (LA7_1=='/') ) {
+                        alt7=2;
+                    }
+                    else if ( ((LA7_1>='\u0000' && LA7_1<='.')||(LA7_1>='0' && LA7_1<='\uFFFF')) ) {
+                        alt7=1;
+                    }
+
+
+                }
+                else if ( ((LA7_0>='\u0000' && LA7_0<=')')||(LA7_0>='+' && LA7_0<='\uFFFF')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // InternalFlaDsl.g:1429:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop7;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1431:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalFlaDsl.g:1431:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // InternalFlaDsl.g:1431:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( ((LA8_0>='\u0000' && LA8_0<='\t')||(LA8_0>='\u000B' && LA8_0<='\f')||(LA8_0>='\u000E' && LA8_0<='\uFFFF')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // InternalFlaDsl.g:1431:24: ~ ( ( '\\n' | '\\r' ) )
+            	    {
+            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+            // InternalFlaDsl.g:1431:40: ( ( '\\r' )? '\\n' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\n'||LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // InternalFlaDsl.g:1431:41: ( '\\r' )? '\\n'
+                    {
+                    // InternalFlaDsl.g:1431:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // InternalFlaDsl.g:1431:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1433:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalFlaDsl.g:1433:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // InternalFlaDsl.g:1433:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt11=0;
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\t' && LA11_0<='\n')||LA11_0=='\r'||LA11_0==' ') ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // InternalFlaDsl.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt11 >= 1 ) break loop11;
+                        EarlyExitException eee =
+                            new EarlyExitException(11, input);
+                        throw eee;
+                }
+                cnt11++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalFlaDsl.g:1435:16: ( . )
+            // InternalFlaDsl.g:1435:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // InternalFlaDsl.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=37;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // InternalFlaDsl.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // InternalFlaDsl.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // InternalFlaDsl.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // InternalFlaDsl.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // InternalFlaDsl.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // InternalFlaDsl.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // InternalFlaDsl.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // InternalFlaDsl.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // InternalFlaDsl.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // InternalFlaDsl.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // InternalFlaDsl.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // InternalFlaDsl.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // InternalFlaDsl.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // InternalFlaDsl.g:1:88: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 15 :
+                // InternalFlaDsl.g:1:94: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 16 :
+                // InternalFlaDsl.g:1:100: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 17 :
+                // InternalFlaDsl.g:1:106: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 18 :
+                // InternalFlaDsl.g:1:112: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 19 :
+                // InternalFlaDsl.g:1:118: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 20 :
+                // InternalFlaDsl.g:1:124: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 21 :
+                // InternalFlaDsl.g:1:130: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 22 :
+                // InternalFlaDsl.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // InternalFlaDsl.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // InternalFlaDsl.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // InternalFlaDsl.g:1:154: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 26 :
+                // InternalFlaDsl.g:1:160: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 27 :
+                // InternalFlaDsl.g:1:166: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 28 :
+                // InternalFlaDsl.g:1:172: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 29 :
+                // InternalFlaDsl.g:1:178: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 30 :
+                // InternalFlaDsl.g:1:184: T__40
+                {
+                mT__40(); 
+
+                }
+                break;
+            case 31 :
+                // InternalFlaDsl.g:1:190: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 32 :
+                // InternalFlaDsl.g:1:198: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 33 :
+                // InternalFlaDsl.g:1:207: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 34 :
+                // InternalFlaDsl.g:1:219: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 35 :
+                // InternalFlaDsl.g:1:235: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 36 :
+                // InternalFlaDsl.g:1:251: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 37 :
+                // InternalFlaDsl.g:1:259: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\1\37\1\35\2\uffff\1\37\3\uffff\15\37\1\35\2\uffff\3\35\2\uffff\1\37\4\uffff\1\37\3\uffff\17\37\5\uffff\25\37\1\uffff\3\37\1\150\3\37\1\154\17\37\1\uffff\2\37\1\177\1\uffff\22\37\1\uffff\21\37\1\u00a4\22\37\1\uffff\1\u00b8\1\37\1\u00ba\15\37\1\u00c8\1\37\1\u00ca\1\uffff\1\37\1\uffff\15\37\1\uffff\1\37\1\uffff\1\u00da\15\37\1\u00e8\1\uffff\1\u00e9\1\u00ea\13\37\3\uffff\1\u00f6\1\37\1\u00f8\1\u00f9\4\37\1\u00fe\2\37\1\uffff\1\u0101\2\uffff\4\37\1\uffff\2\37\1\uffff\1\u0108\3\37\1\u010c\1\37\1\uffff\3\37\1\uffff\2\37\1\u0113\3\37\1\uffff\5\37\1\u011c\2\37\1\uffff\1\37\1\u0120\1\37\1\uffff\1\37\1\u0123\1\uffff";
+    static final String DFA12_eofS =
+        "\u0124\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\114\1\76\2\uffff\1\156\3\uffff\1\157\1\151\2\141\1\157\1\155\1\141\1\155\1\154\1\165\1\141\1\145\1\141\1\101\2\uffff\2\0\1\52\2\uffff\1\101\4\uffff\1\144\3\uffff\1\106\1\154\1\162\1\164\1\155\1\151\1\154\1\143\1\160\2\154\1\156\3\162\5\uffff\1\72\1\145\1\160\1\141\1\145\1\154\1\144\1\154\1\145\1\155\1\163\1\165\1\157\2\145\1\137\1\154\1\147\1\151\2\164\1\uffff\1\146\1\145\1\151\1\60\1\157\1\143\1\171\1\60\1\151\1\163\1\145\1\155\2\162\1\157\1\137\1\145\2\141\2\151\1\143\1\154\1\uffff\1\163\1\141\1\60\1\uffff\1\163\1\151\1\103\1\160\1\163\1\146\1\155\1\162\1\143\1\137\1\154\1\142\1\141\1\156\1\151\1\165\1\163\1\162\1\uffff\1\163\1\157\1\165\1\157\1\154\1\151\1\145\1\141\1\137\1\157\1\166\1\151\2\154\1\145\1\146\1\162\1\60\1\144\1\151\1\156\1\142\1\141\1\145\1\163\1\162\1\156\1\143\1\156\1\151\1\172\1\145\1\137\1\144\1\151\1\145\1\uffff\1\60\1\157\1\60\1\164\1\162\2\164\2\145\2\157\1\163\1\157\1\141\1\137\1\154\1\60\1\145\1\60\1\uffff\1\156\1\uffff\1\154\1\163\1\151\1\145\2\156\1\164\1\155\1\151\1\154\1\142\1\154\1\157\1\uffff\1\144\1\uffff\1\60\2\145\1\157\1\156\2\143\1\150\1\160\1\163\1\141\1\154\1\145\1\163\1\60\1\uffff\2\60\1\156\1\143\2\145\1\151\1\145\2\164\1\145\1\166\1\163\3\uffff\1\60\1\171\2\60\2\156\1\145\1\151\1\60\1\145\1\137\1\uffff\1\60\2\uffff\1\147\1\163\1\156\1\157\1\uffff\1\154\1\141\1\uffff\1\60\1\141\1\143\1\156\1\60\1\154\1\uffff\1\164\1\171\1\137\1\uffff\1\154\1\151\1\60\1\141\2\157\1\uffff\1\154\1\167\1\156\1\154\1\145\1\60\1\157\1\144\1\uffff\1\167\1\60\1\145\1\uffff\1\144\1\60\1\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\1\114\1\76\2\uffff\1\156\3\uffff\1\157\1\151\2\141\1\157\1\155\1\141\1\156\1\154\1\165\1\141\1\145\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\101\4\uffff\1\163\3\uffff\1\156\1\154\1\162\1\164\1\155\1\151\1\154\1\164\1\160\2\154\1\156\3\162\5\uffff\1\72\1\145\1\160\1\141\1\145\1\154\1\144\1\154\1\145\1\155\1\163\1\165\1\157\2\145\1\137\1\154\1\147\1\151\2\164\1\uffff\1\146\1\145\1\151\1\172\1\157\1\143\1\171\1\172\1\151\1\163\1\145\1\156\2\162\1\157\1\137\1\145\2\141\2\151\1\143\1\154\1\uffff\1\163\1\141\1\172\1\uffff\1\163\1\151\1\123\1\160\1\163\1\146\1\155\1\162\1\143\1\137\1\154\1\142\1\141\1\156\1\151\1\165\1\163\1\162\1\uffff\1\163\1\157\1\165\1\157\1\154\1\151\1\145\1\141\1\137\1\157\1\166\1\151\2\154\1\145\1\146\1\162\1\172\1\144\1\151\1\156\1\142\1\141\1\145\1\163\1\162\3\156\1\151\1\172\1\145\1\137\1\144\1\151\1\145\1\uffff\1\172\1\157\1\172\1\164\1\162\2\164\2\145\2\157\1\163\1\157\1\141\1\137\1\154\1\172\1\145\1\172\1\uffff\1\156\1\uffff\1\154\1\163\1\151\1\145\2\156\1\164\1\155\1\151\1\154\1\142\1\154\1\157\1\uffff\1\144\1\uffff\1\172\2\145\1\157\1\156\2\143\1\150\1\160\1\163\1\141\1\154\1\145\1\163\1\172\1\uffff\2\172\1\156\1\143\2\145\1\151\1\145\2\164\1\145\1\166\1\163\3\uffff\1\172\1\171\2\172\2\156\1\145\1\151\1\172\1\145\1\137\1\uffff\1\172\2\uffff\1\147\1\163\1\156\1\157\1\uffff\1\154\1\141\1\uffff\1\172\1\141\1\143\1\156\1\172\1\154\1\uffff\1\164\1\171\1\137\1\uffff\1\154\1\151\1\172\1\141\2\157\1\uffff\1\154\1\167\1\156\1\154\1\145\1\172\1\157\1\144\1\uffff\1\167\1\172\1\145\1\uffff\1\144\1\172\1\uffff";
+    static final String DFA12_acceptS =
+        "\3\uffff\1\3\1\4\1\uffff\1\6\1\7\1\10\16\uffff\1\37\1\40\3\uffff\1\44\1\45\1\uffff\1\37\1\2\1\3\1\4\1\uffff\1\6\1\7\1\10\17\uffff\1\40\1\41\1\42\1\43\1\44\25\uffff\1\1\27\uffff\1\22\3\uffff\1\14\22\uffff\1\13\44\uffff\1\35\23\uffff\1\12\1\uffff\1\16\15\uffff\1\5\1\uffff\1\11\17\uffff\1\15\15\uffff\1\23\1\17\1\20\13\uffff\1\21\1\uffff\1\25\1\26\4\uffff\1\33\2\uffff\1\24\6\uffff\1\27\3\uffff\1\34\6\uffff\1\31\10\uffff\1\30\3\uffff\1\36\2\uffff\1\32";
+    static final String DFA12_specialS =
+        "\1\1\30\uffff\1\0\1\2\u0109\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\35\2\34\2\35\1\34\22\35\1\34\1\35\1\31\4\35\1\32\4\35\1\4\1\2\1\6\1\33\12\30\1\35\1\3\5\35\5\27\1\1\24\27\3\35\1\26\1\27\1\35\1\21\1\27\1\15\1\27\1\13\1\22\2\27\1\20\2\27\1\14\1\27\1\11\1\16\1\25\1\27\1\23\1\24\1\27\1\5\1\17\1\12\3\27\1\7\1\35\1\10\uff82\35",
+            "\1\36",
+            "\1\40",
+            "",
+            "",
+            "\1\43",
+            "",
+            "",
+            "",
+            "\1\47",
+            "\1\50",
+            "\1\51",
+            "\1\52",
+            "\1\53",
+            "\1\54",
+            "\1\55",
+            "\1\57\1\56",
+            "\1\60",
+            "\1\61",
+            "\1\62",
+            "\1\63",
+            "\1\65\15\uffff\1\64",
+            "\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "",
+            "\0\67",
+            "\0\67",
+            "\1\70\4\uffff\1\71",
+            "",
+            "",
+            "\1\73",
+            "",
+            "",
+            "",
+            "",
+            "\1\74\16\uffff\1\75",
+            "",
+            "",
+            "",
+            "\1\76\30\uffff\1\100\16\uffff\1\77",
+            "\1\101",
+            "\1\102",
+            "\1\103",
+            "\1\104",
+            "\1\105",
+            "\1\106",
+            "\1\107\20\uffff\1\110",
+            "\1\111",
+            "\1\112",
+            "\1\113",
+            "\1\114",
+            "\1\115",
+            "\1\116",
+            "\1\117",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\120",
+            "\1\121",
+            "\1\122",
+            "\1\123",
+            "\1\124",
+            "\1\125",
+            "\1\126",
+            "\1\127",
+            "\1\130",
+            "\1\131",
+            "\1\132",
+            "\1\133",
+            "\1\134",
+            "\1\135",
+            "\1\136",
+            "\1\137",
+            "\1\140",
+            "\1\141",
+            "\1\142",
+            "\1\143",
+            "\1\144",
+            "",
+            "\1\145",
+            "\1\146",
+            "\1\147",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\151",
+            "\1\152",
+            "\1\153",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\155",
+            "\1\156",
+            "\1\157",
+            "\1\160\1\161",
+            "\1\162",
+            "\1\163",
+            "\1\164",
+            "\1\165",
+            "\1\166",
+            "\1\167",
+            "\1\170",
+            "\1\171",
+            "\1\172",
+            "\1\173",
+            "\1\174",
+            "",
+            "\1\175",
+            "\1\176",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "\1\u0080",
+            "\1\u0081",
+            "\1\u0083\17\uffff\1\u0082",
+            "\1\u0084",
+            "\1\u0085",
+            "\1\u0086",
+            "\1\u0087",
+            "\1\u0088",
+            "\1\u0089",
+            "\1\u008a",
+            "\1\u008b",
+            "\1\u008c",
+            "\1\u008d",
+            "\1\u008e",
+            "\1\u008f",
+            "\1\u0090",
+            "\1\u0091",
+            "\1\u0092",
+            "",
+            "\1\u0093",
+            "\1\u0094",
+            "\1\u0095",
+            "\1\u0096",
+            "\1\u0097",
+            "\1\u0098",
+            "\1\u0099",
+            "\1\u009a",
+            "\1\u009b",
+            "\1\u009c",
+            "\1\u009d",
+            "\1\u009e",
+            "\1\u009f",
+            "\1\u00a0",
+            "\1\u00a1",
+            "\1\u00a2",
+            "\1\u00a3",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00a5",
+            "\1\u00a6",
+            "\1\u00a7",
+            "\1\u00a8",
+            "\1\u00a9",
+            "\1\u00aa",
+            "\1\u00ab",
+            "\1\u00ac",
+            "\1\u00ad",
+            "\1\u00af\12\uffff\1\u00ae",
+            "\1\u00b0",
+            "\1\u00b1",
+            "\1\u00b2",
+            "\1\u00b3",
+            "\1\u00b4",
+            "\1\u00b5",
+            "\1\u00b6",
+            "\1\u00b7",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00b9",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00bb",
+            "\1\u00bc",
+            "\1\u00bd",
+            "\1\u00be",
+            "\1\u00bf",
+            "\1\u00c0",
+            "\1\u00c1",
+            "\1\u00c2",
+            "\1\u00c3",
+            "\1\u00c4",
+            "\1\u00c5",
+            "\1\u00c6",
+            "\1\u00c7",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00c9",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "\1\u00cb",
+            "",
+            "\1\u00cc",
+            "\1\u00cd",
+            "\1\u00ce",
+            "\1\u00cf",
+            "\1\u00d0",
+            "\1\u00d1",
+            "\1\u00d2",
+            "\1\u00d3",
+            "\1\u00d4",
+            "\1\u00d5",
+            "\1\u00d6",
+            "\1\u00d7",
+            "\1\u00d8",
+            "",
+            "\1\u00d9",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00db",
+            "\1\u00dc",
+            "\1\u00dd",
+            "\1\u00de",
+            "\1\u00df",
+            "\1\u00e0",
+            "\1\u00e1",
+            "\1\u00e2",
+            "\1\u00e3",
+            "\1\u00e4",
+            "\1\u00e5",
+            "\1\u00e6",
+            "\1\u00e7",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00eb",
+            "\1\u00ec",
+            "\1\u00ed",
+            "\1\u00ee",
+            "\1\u00ef",
+            "\1\u00f0",
+            "\1\u00f1",
+            "\1\u00f2",
+            "\1\u00f3",
+            "\1\u00f4",
+            "\1\u00f5",
+            "",
+            "",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00f7",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00fa",
+            "\1\u00fb",
+            "\1\u00fc",
+            "\1\u00fd",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u00ff",
+            "\1\u0100",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "",
+            "",
+            "\1\u0102",
+            "\1\u0103",
+            "\1\u0104",
+            "\1\u0105",
+            "",
+            "\1\u0106",
+            "\1\u0107",
+            "",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u0109",
+            "\1\u010a",
+            "\1\u010b",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u010d",
+            "",
+            "\1\u010e",
+            "\1\u010f",
+            "\1\u0110",
+            "",
+            "\1\u0111",
+            "\1\u0112",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u0114",
+            "\1\u0115",
+            "\1\u0116",
+            "",
+            "\1\u0117",
+            "\1\u0118",
+            "\1\u0119",
+            "\1\u011a",
+            "\1\u011b",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u011d",
+            "\1\u011e",
+            "",
+            "\1\u011f",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            "\1\u0121",
+            "",
+            "\1\u0122",
+            "\12\37\7\uffff\32\37\4\uffff\1\37\1\uffff\32\37",
+            ""
+    };
+
+    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
+    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
+    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
+    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
+    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
+    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
+    static final short[][] DFA12_transition;
+
+    static {
+        int numStates = DFA12_transitionS.length;
+        DFA12_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+        }
+    }
+
+    class DFA12 extends DFA {
+
+        public DFA12(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 12;
+            this.eot = DFA12_eot;
+            this.eof = DFA12_eof;
+            this.min = DFA12_min;
+            this.max = DFA12_max;
+            this.accept = DFA12_accept;
+            this.special = DFA12_special;
+            this.transition = DFA12_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA12_25 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_25>='\u0000' && LA12_25<='\uFFFF')) ) {s = 55;}
+
+                        else s = 29;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='F') ) {s = 1;}
+
+                        else if ( (LA12_0=='-') ) {s = 2;}
+
+                        else if ( (LA12_0==';') ) {s = 3;}
+
+                        else if ( (LA12_0==',') ) {s = 4;}
+
+                        else if ( (LA12_0=='u') ) {s = 5;}
+
+                        else if ( (LA12_0=='.') ) {s = 6;}
+
+                        else if ( (LA12_0=='{') ) {s = 7;}
+
+                        else if ( (LA12_0=='}') ) {s = 8;}
+
+                        else if ( (LA12_0=='n') ) {s = 9;}
+
+                        else if ( (LA12_0=='w') ) {s = 10;}
+
+                        else if ( (LA12_0=='e') ) {s = 11;}
+
+                        else if ( (LA12_0=='l') ) {s = 12;}
+
+                        else if ( (LA12_0=='c') ) {s = 13;}
+
+                        else if ( (LA12_0=='o') ) {s = 14;}
+
+                        else if ( (LA12_0=='v') ) {s = 15;}
+
+                        else if ( (LA12_0=='i') ) {s = 16;}
+
+                        else if ( (LA12_0=='a') ) {s = 17;}
+
+                        else if ( (LA12_0=='f') ) {s = 18;}
+
+                        else if ( (LA12_0=='r') ) {s = 19;}
+
+                        else if ( (LA12_0=='s') ) {s = 20;}
+
+                        else if ( (LA12_0=='p') ) {s = 21;}
+
+                        else if ( (LA12_0=='^') ) {s = 22;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='E')||(LA12_0>='G' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='b'||LA12_0=='d'||(LA12_0>='g' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='k')||LA12_0=='m'||LA12_0=='q'||LA12_0=='t'||(LA12_0>='x' && LA12_0<='z')) ) {s = 23;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 24;}
+
+                        else if ( (LA12_0=='\"') ) {s = 25;}
+
+                        else if ( (LA12_0=='\'') ) {s = 26;}
+
+                        else if ( (LA12_0=='/') ) {s = 27;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 28;}
+
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='+')||LA12_0==':'||(LA12_0>='<' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 29;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_26 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_26>='\u0000' && LA12_26<='\uFFFF')) ) {s = 55;}
+
+                        else s = 29;
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 12, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDslParser.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDslParser.java
new file mode 100644
index 0000000..55652f5
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/parser/antlr/internal/InternalFlaDslParser.java
@@ -0,0 +1,4027 @@
+package org.polarsys.chess.xtext.parser.antlr.internal; 
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalFlaDslParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'FLA:'", "'->'", "';'", "','", "'undefined'", "'.'", "'{'", "'}'", "'noFailure'", "'wildcard'", "'early'", "'late'", "'commission'", "'omission'", "'valueSubtle'", "'valueCoarse'", "'incompletion'", "'none'", "'unspecified'", "'inconsistency'", "'interference'", "'impermanence'", "'all_or_nothing'", "'all_or_compensation'", "'full_consistency'", "'range_violation_allowed'", "'serializable'", "'portable_level'", "'no_loss'", "'partial_loss_allowed'"
+    };
+    public static final int RULE_STRING=6;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__19=19;
+    public static final int T__15=15;
+    public static final int T__37=37;
+    public static final int T__16=16;
+    public static final int T__38=38;
+    public static final int T__17=17;
+    public static final int T__39=39;
+    public static final int T__18=18;
+    public static final int T__11=11;
+    public static final int T__33=33;
+    public static final int T__12=12;
+    public static final int T__34=34;
+    public static final int T__13=13;
+    public static final int T__35=35;
+    public static final int T__14=14;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_ID=4;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__26=26;
+    public static final int T__27=27;
+    public static final int T__28=28;
+    public static final int RULE_INT=5;
+    public static final int T__29=29;
+    public static final int T__22=22;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__23=23;
+    public static final int T__24=24;
+    public static final int T__25=25;
+    public static final int T__40=40;
+    public static final int T__20=20;
+    public static final int T__21=21;
+
+    // delegates
+    // delegators
+
+
+        public InternalFlaDslParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalFlaDslParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalFlaDslParser.tokenNames; }
+    public String getGrammarFileName() { return "InternalFlaDsl.g"; }
+
+
+
+     	private FlaDslGrammarAccess grammarAccess;
+     	
+        public InternalFlaDslParser(TokenStream input, FlaDslGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "Behaviour";	
+       	}
+       	
+       	@Override
+       	protected FlaDslGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+    // $ANTLR start "entryRuleBehaviour"
+    // InternalFlaDsl.g:68:1: entryRuleBehaviour returns [EObject current=null] : iv_ruleBehaviour= ruleBehaviour EOF ;
+    public final EObject entryRuleBehaviour() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleBehaviour = null;
+
+
+        try {
+            // InternalFlaDsl.g:69:2: (iv_ruleBehaviour= ruleBehaviour EOF )
+            // InternalFlaDsl.g:70:2: iv_ruleBehaviour= ruleBehaviour EOF
+            {
+             newCompositeNode(grammarAccess.getBehaviourRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleBehaviour=ruleBehaviour();
+
+            state._fsp--;
+
+             current =iv_ruleBehaviour; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleBehaviour"
+
+
+    // $ANTLR start "ruleBehaviour"
+    // InternalFlaDsl.g:77:1: ruleBehaviour returns [EObject current=null] : ( (lv_rules_0_0= ruleExpression ) )+ ;
+    public final EObject ruleBehaviour() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_rules_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:80:28: ( ( (lv_rules_0_0= ruleExpression ) )+ )
+            // InternalFlaDsl.g:81:1: ( (lv_rules_0_0= ruleExpression ) )+
+            {
+            // InternalFlaDsl.g:81:1: ( (lv_rules_0_0= ruleExpression ) )+
+            int cnt1=0;
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==11) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // InternalFlaDsl.g:82:1: (lv_rules_0_0= ruleExpression )
+            	    {
+            	    // InternalFlaDsl.g:82:1: (lv_rules_0_0= ruleExpression )
+            	    // InternalFlaDsl.g:83:3: lv_rules_0_0= ruleExpression
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getBehaviourAccess().getRulesExpressionParserRuleCall_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_3);
+            	    lv_rules_0_0=ruleExpression();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getBehaviourRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"rules",
+            	            		lv_rules_0_0, 
+            	            		"org.polarsys.chess.xtext.FlaDsl.Expression");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt1 >= 1 ) break loop1;
+                        EarlyExitException eee =
+                            new EarlyExitException(1, input);
+                        throw eee;
+                }
+                cnt1++;
+            } while (true);
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleBehaviour"
+
+
+    // $ANTLR start "entryRuleExpression"
+    // InternalFlaDsl.g:107:1: entryRuleExpression returns [EObject current=null] : iv_ruleExpression= ruleExpression EOF ;
+    public final EObject entryRuleExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleExpression = null;
+
+
+        try {
+            // InternalFlaDsl.g:108:2: (iv_ruleExpression= ruleExpression EOF )
+            // InternalFlaDsl.g:109:2: iv_ruleExpression= ruleExpression EOF
+            {
+             newCompositeNode(grammarAccess.getExpressionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleExpression=ruleExpression();
+
+            state._fsp--;
+
+             current =iv_ruleExpression; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleExpression"
+
+
+    // $ANTLR start "ruleExpression"
+    // InternalFlaDsl.g:116:1: ruleExpression returns [EObject current=null] : (otherlv_0= 'FLA:' ( (lv_lhs_1_0= ruleLhs ) ) otherlv_2= '->' ( (lv_rhs_3_0= ruleRhs ) ) otherlv_4= ';' ) ;
+    public final EObject ruleExpression() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        EObject lv_lhs_1_0 = null;
+
+        EObject lv_rhs_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:119:28: ( (otherlv_0= 'FLA:' ( (lv_lhs_1_0= ruleLhs ) ) otherlv_2= '->' ( (lv_rhs_3_0= ruleRhs ) ) otherlv_4= ';' ) )
+            // InternalFlaDsl.g:120:1: (otherlv_0= 'FLA:' ( (lv_lhs_1_0= ruleLhs ) ) otherlv_2= '->' ( (lv_rhs_3_0= ruleRhs ) ) otherlv_4= ';' )
+            {
+            // InternalFlaDsl.g:120:1: (otherlv_0= 'FLA:' ( (lv_lhs_1_0= ruleLhs ) ) otherlv_2= '->' ( (lv_rhs_3_0= ruleRhs ) ) otherlv_4= ';' )
+            // InternalFlaDsl.g:120:3: otherlv_0= 'FLA:' ( (lv_lhs_1_0= ruleLhs ) ) otherlv_2= '->' ( (lv_rhs_3_0= ruleRhs ) ) otherlv_4= ';'
+            {
+            otherlv_0=(Token)match(input,11,FOLLOW_4); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getExpressionAccess().getFLAKeyword_0());
+                
+            // InternalFlaDsl.g:124:1: ( (lv_lhs_1_0= ruleLhs ) )
+            // InternalFlaDsl.g:125:1: (lv_lhs_1_0= ruleLhs )
+            {
+            // InternalFlaDsl.g:125:1: (lv_lhs_1_0= ruleLhs )
+            // InternalFlaDsl.g:126:3: lv_lhs_1_0= ruleLhs
+            {
+             
+            	        newCompositeNode(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0()); 
+            	    
+            pushFollow(FOLLOW_5);
+            lv_lhs_1_0=ruleLhs();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getExpressionRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"lhs",
+                    		lv_lhs_1_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Lhs");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FOLLOW_4); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getExpressionAccess().getHyphenMinusGreaterThanSignKeyword_2());
+                
+            // InternalFlaDsl.g:146:1: ( (lv_rhs_3_0= ruleRhs ) )
+            // InternalFlaDsl.g:147:1: (lv_rhs_3_0= ruleRhs )
+            {
+            // InternalFlaDsl.g:147:1: (lv_rhs_3_0= ruleRhs )
+            // InternalFlaDsl.g:148:3: lv_rhs_3_0= ruleRhs
+            {
+             
+            	        newCompositeNode(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0()); 
+            	    
+            pushFollow(FOLLOW_6);
+            lv_rhs_3_0=ruleRhs();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getExpressionRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"rhs",
+                    		lv_rhs_3_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Rhs");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_4=(Token)match(input,13,FOLLOW_2); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getExpressionAccess().getSemicolonKeyword_4());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleExpression"
+
+
+    // $ANTLR start "entryRuleLhs"
+    // InternalFlaDsl.g:176:1: entryRuleLhs returns [EObject current=null] : iv_ruleLhs= ruleLhs EOF ;
+    public final EObject entryRuleLhs() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleLhs = null;
+
+
+        try {
+            // InternalFlaDsl.g:177:2: (iv_ruleLhs= ruleLhs EOF )
+            // InternalFlaDsl.g:178:2: iv_ruleLhs= ruleLhs EOF
+            {
+             newCompositeNode(grammarAccess.getLhsRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleLhs=ruleLhs();
+
+            state._fsp--;
+
+             current =iv_ruleLhs; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleLhs"
+
+
+    // $ANTLR start "ruleLhs"
+    // InternalFlaDsl.g:185:1: ruleLhs returns [EObject current=null] : ( ( (lv_failures_0_0= ruleInputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) ) )* ) ;
+    public final EObject ruleLhs() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        EObject lv_failures_0_0 = null;
+
+        EObject lv_failures_2_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:188:28: ( ( ( (lv_failures_0_0= ruleInputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) ) )* ) )
+            // InternalFlaDsl.g:189:1: ( ( (lv_failures_0_0= ruleInputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) ) )* )
+            {
+            // InternalFlaDsl.g:189:1: ( ( (lv_failures_0_0= ruleInputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) ) )* )
+            // InternalFlaDsl.g:189:2: ( (lv_failures_0_0= ruleInputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) ) )*
+            {
+            // InternalFlaDsl.g:189:2: ( (lv_failures_0_0= ruleInputExpression ) )
+            // InternalFlaDsl.g:190:1: (lv_failures_0_0= ruleInputExpression )
+            {
+            // InternalFlaDsl.g:190:1: (lv_failures_0_0= ruleInputExpression )
+            // InternalFlaDsl.g:191:3: lv_failures_0_0= ruleInputExpression
+            {
+             
+            	        newCompositeNode(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_0_0()); 
+            	    
+            pushFollow(FOLLOW_7);
+            lv_failures_0_0=ruleInputExpression();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getLhsRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"failures",
+                    		lv_failures_0_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.InputExpression");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // InternalFlaDsl.g:207:2: (otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) ) )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( (LA2_0==14) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // InternalFlaDsl.g:207:4: otherlv_1= ',' ( (lv_failures_2_0= ruleInputExpression ) )
+            	    {
+            	    otherlv_1=(Token)match(input,14,FOLLOW_4); 
+
+            	        	newLeafNode(otherlv_1, grammarAccess.getLhsAccess().getCommaKeyword_1_0());
+            	        
+            	    // InternalFlaDsl.g:211:1: ( (lv_failures_2_0= ruleInputExpression ) )
+            	    // InternalFlaDsl.g:212:1: (lv_failures_2_0= ruleInputExpression )
+            	    {
+            	    // InternalFlaDsl.g:212:1: (lv_failures_2_0= ruleInputExpression )
+            	    // InternalFlaDsl.g:213:3: lv_failures_2_0= ruleInputExpression
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getLhsAccess().getFailuresInputExpressionParserRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_7);
+            	    lv_failures_2_0=ruleInputExpression();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getLhsRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"failures",
+            	            		lv_failures_2_0, 
+            	            		"org.polarsys.chess.xtext.FlaDsl.InputExpression");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleLhs"
+
+
+    // $ANTLR start "entryRuleRhs"
+    // InternalFlaDsl.g:237:1: entryRuleRhs returns [EObject current=null] : iv_ruleRhs= ruleRhs EOF ;
+    public final EObject entryRuleRhs() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRhs = null;
+
+
+        try {
+            // InternalFlaDsl.g:238:2: (iv_ruleRhs= ruleRhs EOF )
+            // InternalFlaDsl.g:239:2: iv_ruleRhs= ruleRhs EOF
+            {
+             newCompositeNode(grammarAccess.getRhsRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleRhs=ruleRhs();
+
+            state._fsp--;
+
+             current =iv_ruleRhs; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRhs"
+
+
+    // $ANTLR start "ruleRhs"
+    // InternalFlaDsl.g:246:1: ruleRhs returns [EObject current=null] : ( ( (lv_failures_0_0= ruleOutputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) ) )* ) ;
+    public final EObject ruleRhs() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        EObject lv_failures_0_0 = null;
+
+        EObject lv_failures_2_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:249:28: ( ( ( (lv_failures_0_0= ruleOutputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) ) )* ) )
+            // InternalFlaDsl.g:250:1: ( ( (lv_failures_0_0= ruleOutputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) ) )* )
+            {
+            // InternalFlaDsl.g:250:1: ( ( (lv_failures_0_0= ruleOutputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) ) )* )
+            // InternalFlaDsl.g:250:2: ( (lv_failures_0_0= ruleOutputExpression ) ) (otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) ) )*
+            {
+            // InternalFlaDsl.g:250:2: ( (lv_failures_0_0= ruleOutputExpression ) )
+            // InternalFlaDsl.g:251:1: (lv_failures_0_0= ruleOutputExpression )
+            {
+            // InternalFlaDsl.g:251:1: (lv_failures_0_0= ruleOutputExpression )
+            // InternalFlaDsl.g:252:3: lv_failures_0_0= ruleOutputExpression
+            {
+             
+            	        newCompositeNode(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_0_0()); 
+            	    
+            pushFollow(FOLLOW_7);
+            lv_failures_0_0=ruleOutputExpression();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getRhsRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"failures",
+                    		lv_failures_0_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.OutputExpression");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // InternalFlaDsl.g:268:2: (otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) ) )*
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0==14) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // InternalFlaDsl.g:268:4: otherlv_1= ',' ( (lv_failures_2_0= ruleOutputExpression ) )
+            	    {
+            	    otherlv_1=(Token)match(input,14,FOLLOW_4); 
+
+            	        	newLeafNode(otherlv_1, grammarAccess.getRhsAccess().getCommaKeyword_1_0());
+            	        
+            	    // InternalFlaDsl.g:272:1: ( (lv_failures_2_0= ruleOutputExpression ) )
+            	    // InternalFlaDsl.g:273:1: (lv_failures_2_0= ruleOutputExpression )
+            	    {
+            	    // InternalFlaDsl.g:273:1: (lv_failures_2_0= ruleOutputExpression )
+            	    // InternalFlaDsl.g:274:3: lv_failures_2_0= ruleOutputExpression
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getRhsAccess().getFailuresOutputExpressionParserRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_7);
+            	    lv_failures_2_0=ruleOutputExpression();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getRhsRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"failures",
+            	            		lv_failures_2_0, 
+            	            		"org.polarsys.chess.xtext.FlaDsl.OutputExpression");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop3;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRhs"
+
+
+    // $ANTLR start "entryRuleInputExpression"
+    // InternalFlaDsl.g:298:1: entryRuleInputExpression returns [EObject current=null] : iv_ruleInputExpression= ruleInputExpression EOF ;
+    public final EObject entryRuleInputExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleInputExpression = null;
+
+
+        try {
+            // InternalFlaDsl.g:299:2: (iv_ruleInputExpression= ruleInputExpression EOF )
+            // InternalFlaDsl.g:300:2: iv_ruleInputExpression= ruleInputExpression EOF
+            {
+             newCompositeNode(grammarAccess.getInputExpressionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleInputExpression=ruleInputExpression();
+
+            state._fsp--;
+
+             current =iv_ruleInputExpression; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleInputExpression"
+
+
+    // $ANTLR start "ruleInputExpression"
+    // InternalFlaDsl.g:307:1: ruleInputExpression returns [EObject current=null] : ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleInFailureExpr ) ) ) ;
+    public final EObject ruleInputExpression() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+        EObject lv_failureExpr_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:310:28: ( ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleInFailureExpr ) ) ) )
+            // InternalFlaDsl.g:311:1: ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleInFailureExpr ) ) )
+            {
+            // InternalFlaDsl.g:311:1: ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleInFailureExpr ) ) )
+            // InternalFlaDsl.g:311:2: ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleInFailureExpr ) )
+            {
+            // InternalFlaDsl.g:311:2: ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' )
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==RULE_ID) ) {
+                alt4=1;
+            }
+            else if ( (LA4_0==15) ) {
+                alt4=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 4, 0, input);
+
+                throw nvae;
+            }
+            switch (alt4) {
+                case 1 :
+                    // InternalFlaDsl.g:311:3: ( (otherlv_0= RULE_ID ) )
+                    {
+                    // InternalFlaDsl.g:311:3: ( (otherlv_0= RULE_ID ) )
+                    // InternalFlaDsl.g:312:1: (otherlv_0= RULE_ID )
+                    {
+                    // InternalFlaDsl.g:312:1: (otherlv_0= RULE_ID )
+                    // InternalFlaDsl.g:313:3: otherlv_0= RULE_ID
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getInputExpressionRule());
+                    	        }
+                            
+                    otherlv_0=(Token)match(input,RULE_ID,FOLLOW_8); 
+
+                    		newLeafNode(otherlv_0, grammarAccess.getInputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+                    	
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:325:7: otherlv_1= 'undefined'
+                    {
+                    otherlv_1=(Token)match(input,15,FOLLOW_8); 
+
+                        	newLeafNode(otherlv_1, grammarAccess.getInputExpressionAccess().getUndefinedKeyword_0_1());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_2=(Token)match(input,16,FOLLOW_9); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getInputExpressionAccess().getFullStopKeyword_1());
+                
+            // InternalFlaDsl.g:333:1: ( (lv_failureExpr_3_0= ruleInFailureExpr ) )
+            // InternalFlaDsl.g:334:1: (lv_failureExpr_3_0= ruleInFailureExpr )
+            {
+            // InternalFlaDsl.g:334:1: (lv_failureExpr_3_0= ruleInFailureExpr )
+            // InternalFlaDsl.g:335:3: lv_failureExpr_3_0= ruleInFailureExpr
+            {
+             
+            	        newCompositeNode(grammarAccess.getInputExpressionAccess().getFailureExprInFailureExprParserRuleCall_2_0()); 
+            	    
+            pushFollow(FOLLOW_2);
+            lv_failureExpr_3_0=ruleInFailureExpr();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getInputExpressionRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"failureExpr",
+                    		lv_failureExpr_3_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.InFailureExpr");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleInputExpression"
+
+
+    // $ANTLR start "entryRuleOutputExpression"
+    // InternalFlaDsl.g:359:1: entryRuleOutputExpression returns [EObject current=null] : iv_ruleOutputExpression= ruleOutputExpression EOF ;
+    public final EObject entryRuleOutputExpression() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleOutputExpression = null;
+
+
+        try {
+            // InternalFlaDsl.g:360:2: (iv_ruleOutputExpression= ruleOutputExpression EOF )
+            // InternalFlaDsl.g:361:2: iv_ruleOutputExpression= ruleOutputExpression EOF
+            {
+             newCompositeNode(grammarAccess.getOutputExpressionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleOutputExpression=ruleOutputExpression();
+
+            state._fsp--;
+
+             current =iv_ruleOutputExpression; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleOutputExpression"
+
+
+    // $ANTLR start "ruleOutputExpression"
+    // InternalFlaDsl.g:368:1: ruleOutputExpression returns [EObject current=null] : ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleOutFailureExpr ) ) ) ;
+    public final EObject ruleOutputExpression() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+        EObject lv_failureExpr_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:371:28: ( ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleOutFailureExpr ) ) ) )
+            // InternalFlaDsl.g:372:1: ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleOutFailureExpr ) ) )
+            {
+            // InternalFlaDsl.g:372:1: ( ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleOutFailureExpr ) ) )
+            // InternalFlaDsl.g:372:2: ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' ) otherlv_2= '.' ( (lv_failureExpr_3_0= ruleOutFailureExpr ) )
+            {
+            // InternalFlaDsl.g:372:2: ( ( (otherlv_0= RULE_ID ) ) | otherlv_1= 'undefined' )
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==RULE_ID) ) {
+                alt5=1;
+            }
+            else if ( (LA5_0==15) ) {
+                alt5=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 5, 0, input);
+
+                throw nvae;
+            }
+            switch (alt5) {
+                case 1 :
+                    // InternalFlaDsl.g:372:3: ( (otherlv_0= RULE_ID ) )
+                    {
+                    // InternalFlaDsl.g:372:3: ( (otherlv_0= RULE_ID ) )
+                    // InternalFlaDsl.g:373:1: (otherlv_0= RULE_ID )
+                    {
+                    // InternalFlaDsl.g:373:1: (otherlv_0= RULE_ID )
+                    // InternalFlaDsl.g:374:3: otherlv_0= RULE_ID
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getOutputExpressionRule());
+                    	        }
+                            
+                    otherlv_0=(Token)match(input,RULE_ID,FOLLOW_8); 
+
+                    		newLeafNode(otherlv_0, grammarAccess.getOutputExpressionAccess().getRefPortCrossReference_0_0_0()); 
+                    	
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:386:7: otherlv_1= 'undefined'
+                    {
+                    otherlv_1=(Token)match(input,15,FOLLOW_8); 
+
+                        	newLeafNode(otherlv_1, grammarAccess.getOutputExpressionAccess().getUndefinedKeyword_0_1());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_2=(Token)match(input,16,FOLLOW_9); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getOutputExpressionAccess().getFullStopKeyword_1());
+                
+            // InternalFlaDsl.g:394:1: ( (lv_failureExpr_3_0= ruleOutFailureExpr ) )
+            // InternalFlaDsl.g:395:1: (lv_failureExpr_3_0= ruleOutFailureExpr )
+            {
+            // InternalFlaDsl.g:395:1: (lv_failureExpr_3_0= ruleOutFailureExpr )
+            // InternalFlaDsl.g:396:3: lv_failureExpr_3_0= ruleOutFailureExpr
+            {
+             
+            	        newCompositeNode(grammarAccess.getOutputExpressionAccess().getFailureExprOutFailureExprParserRuleCall_2_0()); 
+            	    
+            pushFollow(FOLLOW_2);
+            lv_failureExpr_3_0=ruleOutFailureExpr();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getOutputExpressionRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"failureExpr",
+                    		lv_failureExpr_3_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.OutFailureExpr");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleOutputExpression"
+
+
+    // $ANTLR start "entryRuleInFailureExpr"
+    // InternalFlaDsl.g:420:1: entryRuleInFailureExpr returns [EObject current=null] : iv_ruleInFailureExpr= ruleInFailureExpr EOF ;
+    public final EObject entryRuleInFailureExpr() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleInFailureExpr = null;
+
+
+        try {
+            // InternalFlaDsl.g:421:2: (iv_ruleInFailureExpr= ruleInFailureExpr EOF )
+            // InternalFlaDsl.g:422:2: iv_ruleInFailureExpr= ruleInFailureExpr EOF
+            {
+             newCompositeNode(grammarAccess.getInFailureExprRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleInFailureExpr=ruleInFailureExpr();
+
+            state._fsp--;
+
+             current =iv_ruleInFailureExpr; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleInFailureExpr"
+
+
+    // $ANTLR start "ruleInFailureExpr"
+    // InternalFlaDsl.g:429:1: ruleInFailureExpr returns [EObject current=null] : ( ( (lv_failures_0_0= ruleWildcardDefinition ) ) | ( (lv_failures_1_0= ruleNoFailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) ) ;
+    public final EObject ruleInFailureExpr() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        EObject lv_failures_0_0 = null;
+
+        EObject lv_failures_1_0 = null;
+
+        EObject lv_failures_2_0 = null;
+
+        EObject lv_failures_4_0 = null;
+
+        EObject lv_failures_6_0 = null;
+
+        EObject lv_failures_8_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:432:28: ( ( ( (lv_failures_0_0= ruleWildcardDefinition ) ) | ( (lv_failures_1_0= ruleNoFailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) ) )
+            // InternalFlaDsl.g:433:1: ( ( (lv_failures_0_0= ruleWildcardDefinition ) ) | ( (lv_failures_1_0= ruleNoFailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) )
+            {
+            // InternalFlaDsl.g:433:1: ( ( (lv_failures_0_0= ruleWildcardDefinition ) ) | ( (lv_failures_1_0= ruleNoFailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) )
+            int alt7=5;
+            switch ( input.LA(1) ) {
+            case 20:
+                {
+                alt7=1;
+                }
+                break;
+            case 19:
+                {
+                alt7=2;
+                }
+                break;
+            case 21:
+            case 22:
+            case 23:
+            case 24:
+            case 25:
+            case 26:
+                {
+                alt7=3;
+                }
+                break;
+            case 17:
+                {
+                alt7=4;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt7=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // InternalFlaDsl.g:433:2: ( (lv_failures_0_0= ruleWildcardDefinition ) )
+                    {
+                    // InternalFlaDsl.g:433:2: ( (lv_failures_0_0= ruleWildcardDefinition ) )
+                    // InternalFlaDsl.g:434:1: (lv_failures_0_0= ruleWildcardDefinition )
+                    {
+                    // InternalFlaDsl.g:434:1: (lv_failures_0_0= ruleWildcardDefinition )
+                    // InternalFlaDsl.g:435:3: lv_failures_0_0= ruleWildcardDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresWildcardDefinitionParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_0_0=ruleWildcardDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_0_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.WildcardDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:452:6: ( (lv_failures_1_0= ruleNoFailureDefinition ) )
+                    {
+                    // InternalFlaDsl.g:452:6: ( (lv_failures_1_0= ruleNoFailureDefinition ) )
+                    // InternalFlaDsl.g:453:1: (lv_failures_1_0= ruleNoFailureDefinition )
+                    {
+                    // InternalFlaDsl.g:453:1: (lv_failures_1_0= ruleNoFailureDefinition )
+                    // InternalFlaDsl.g:454:3: lv_failures_1_0= ruleNoFailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_1_0=ruleNoFailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_1_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.NoFailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:471:6: ( (lv_failures_2_0= ruleFailureDefinition ) )
+                    {
+                    // InternalFlaDsl.g:471:6: ( (lv_failures_2_0= ruleFailureDefinition ) )
+                    // InternalFlaDsl.g:472:1: (lv_failures_2_0= ruleFailureDefinition )
+                    {
+                    // InternalFlaDsl.g:472:1: (lv_failures_2_0= ruleFailureDefinition )
+                    // InternalFlaDsl.g:473:3: lv_failures_2_0= ruleFailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_2_0=ruleFailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_2_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:490:6: (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' )
+                    {
+                    // InternalFlaDsl.g:490:6: (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' )
+                    // InternalFlaDsl.g:490:8: otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}'
+                    {
+                    otherlv_3=(Token)match(input,17,FOLLOW_10); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getInFailureExprAccess().getLeftCurlyBracketKeyword_3_0());
+                        
+                    // InternalFlaDsl.g:494:1: ( (lv_failures_4_0= ruleFailureDefinition ) )
+                    // InternalFlaDsl.g:495:1: (lv_failures_4_0= ruleFailureDefinition )
+                    {
+                    // InternalFlaDsl.g:495:1: (lv_failures_4_0= ruleFailureDefinition )
+                    // InternalFlaDsl.g:496:3: lv_failures_4_0= ruleFailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_11);
+                    lv_failures_4_0=ruleFailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_4_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // InternalFlaDsl.g:512:2: (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+
+                    int cnt6=0;
+                    loop6:
+                    do {
+                        int alt6=2;
+                        int LA6_0 = input.LA(1);
+
+                        if ( (LA6_0==14) ) {
+                            alt6=1;
+                        }
+
+
+                        switch (alt6) {
+                    	case 1 :
+                    	    // InternalFlaDsl.g:512:4: otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) )
+                    	    {
+                    	    otherlv_5=(Token)match(input,14,FOLLOW_10); 
+
+                    	        	newLeafNode(otherlv_5, grammarAccess.getInFailureExprAccess().getCommaKeyword_3_2_0());
+                    	        
+                    	    // InternalFlaDsl.g:516:1: ( (lv_failures_6_0= ruleFailureDefinition ) )
+                    	    // InternalFlaDsl.g:517:1: (lv_failures_6_0= ruleFailureDefinition )
+                    	    {
+                    	    // InternalFlaDsl.g:517:1: (lv_failures_6_0= ruleFailureDefinition )
+                    	    // InternalFlaDsl.g:518:3: lv_failures_6_0= ruleFailureDefinition
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+                    	    	    
+                    	    pushFollow(FOLLOW_12);
+                    	    lv_failures_6_0=ruleFailureDefinition();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"failures",
+                    	            		lv_failures_6_0, 
+                    	            		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt6 >= 1 ) break loop6;
+                                EarlyExitException eee =
+                                    new EarlyExitException(6, input);
+                                throw eee;
+                        }
+                        cnt6++;
+                    } while (true);
+
+                    otherlv_7=(Token)match(input,18,FOLLOW_2); 
+
+                        	newLeafNode(otherlv_7, grammarAccess.getInFailureExprAccess().getRightCurlyBracketKeyword_3_3());
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // InternalFlaDsl.g:539:6: ( (lv_failures_8_0= ruleVariableDefinition ) )
+                    {
+                    // InternalFlaDsl.g:539:6: ( (lv_failures_8_0= ruleVariableDefinition ) )
+                    // InternalFlaDsl.g:540:1: (lv_failures_8_0= ruleVariableDefinition )
+                    {
+                    // InternalFlaDsl.g:540:1: (lv_failures_8_0= ruleVariableDefinition )
+                    // InternalFlaDsl.g:541:3: lv_failures_8_0= ruleVariableDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getInFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_8_0=ruleVariableDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getInFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_8_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.VariableDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleInFailureExpr"
+
+
+    // $ANTLR start "entryRuleOutFailureExpr"
+    // InternalFlaDsl.g:565:1: entryRuleOutFailureExpr returns [EObject current=null] : iv_ruleOutFailureExpr= ruleOutFailureExpr EOF ;
+    public final EObject entryRuleOutFailureExpr() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleOutFailureExpr = null;
+
+
+        try {
+            // InternalFlaDsl.g:566:2: (iv_ruleOutFailureExpr= ruleOutFailureExpr EOF )
+            // InternalFlaDsl.g:567:2: iv_ruleOutFailureExpr= ruleOutFailureExpr EOF
+            {
+             newCompositeNode(grammarAccess.getOutFailureExprRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleOutFailureExpr=ruleOutFailureExpr();
+
+            state._fsp--;
+
+             current =iv_ruleOutFailureExpr; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleOutFailureExpr"
+
+
+    // $ANTLR start "ruleOutFailureExpr"
+    // InternalFlaDsl.g:574:1: ruleOutFailureExpr returns [EObject current=null] : ( ( (lv_failures_0_0= ruleNoFailureDefinition ) ) | ( (lv_failures_1_0= ruleComplexNofailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) ) ;
+    public final EObject ruleOutFailureExpr() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        EObject lv_failures_0_0 = null;
+
+        EObject lv_failures_1_0 = null;
+
+        EObject lv_failures_2_0 = null;
+
+        EObject lv_failures_4_0 = null;
+
+        EObject lv_failures_6_0 = null;
+
+        EObject lv_failures_8_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:577:28: ( ( ( (lv_failures_0_0= ruleNoFailureDefinition ) ) | ( (lv_failures_1_0= ruleComplexNofailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) ) )
+            // InternalFlaDsl.g:578:1: ( ( (lv_failures_0_0= ruleNoFailureDefinition ) ) | ( (lv_failures_1_0= ruleComplexNofailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) )
+            {
+            // InternalFlaDsl.g:578:1: ( ( (lv_failures_0_0= ruleNoFailureDefinition ) ) | ( (lv_failures_1_0= ruleComplexNofailureDefinition ) ) | ( (lv_failures_2_0= ruleFailureDefinition ) ) | (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' ) | ( (lv_failures_8_0= ruleVariableDefinition ) ) )
+            int alt9=5;
+            switch ( input.LA(1) ) {
+            case 19:
+                {
+                int LA9_1 = input.LA(2);
+
+                if ( (LA9_1==EOF||(LA9_1>=13 && LA9_1<=14)) ) {
+                    alt9=1;
+                }
+                else if ( (LA9_1==16) ) {
+                    alt9=2;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 9, 1, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case 21:
+            case 22:
+            case 23:
+            case 24:
+            case 25:
+            case 26:
+                {
+                alt9=3;
+                }
+                break;
+            case 17:
+                {
+                alt9=4;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt9=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // InternalFlaDsl.g:578:2: ( (lv_failures_0_0= ruleNoFailureDefinition ) )
+                    {
+                    // InternalFlaDsl.g:578:2: ( (lv_failures_0_0= ruleNoFailureDefinition ) )
+                    // InternalFlaDsl.g:579:1: (lv_failures_0_0= ruleNoFailureDefinition )
+                    {
+                    // InternalFlaDsl.g:579:1: (lv_failures_0_0= ruleNoFailureDefinition )
+                    // InternalFlaDsl.g:580:3: lv_failures_0_0= ruleNoFailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresNoFailureDefinitionParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_0_0=ruleNoFailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_0_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.NoFailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:597:6: ( (lv_failures_1_0= ruleComplexNofailureDefinition ) )
+                    {
+                    // InternalFlaDsl.g:597:6: ( (lv_failures_1_0= ruleComplexNofailureDefinition ) )
+                    // InternalFlaDsl.g:598:1: (lv_failures_1_0= ruleComplexNofailureDefinition )
+                    {
+                    // InternalFlaDsl.g:598:1: (lv_failures_1_0= ruleComplexNofailureDefinition )
+                    // InternalFlaDsl.g:599:3: lv_failures_1_0= ruleComplexNofailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresComplexNofailureDefinitionParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_1_0=ruleComplexNofailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_1_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.ComplexNofailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:616:6: ( (lv_failures_2_0= ruleFailureDefinition ) )
+                    {
+                    // InternalFlaDsl.g:616:6: ( (lv_failures_2_0= ruleFailureDefinition ) )
+                    // InternalFlaDsl.g:617:1: (lv_failures_2_0= ruleFailureDefinition )
+                    {
+                    // InternalFlaDsl.g:617:1: (lv_failures_2_0= ruleFailureDefinition )
+                    // InternalFlaDsl.g:618:3: lv_failures_2_0= ruleFailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_2_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_2_0=ruleFailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_2_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:635:6: (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' )
+                    {
+                    // InternalFlaDsl.g:635:6: (otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}' )
+                    // InternalFlaDsl.g:635:8: otherlv_3= '{' ( (lv_failures_4_0= ruleFailureDefinition ) ) (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+ otherlv_7= '}'
+                    {
+                    otherlv_3=(Token)match(input,17,FOLLOW_10); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getOutFailureExprAccess().getLeftCurlyBracketKeyword_3_0());
+                        
+                    // InternalFlaDsl.g:639:1: ( (lv_failures_4_0= ruleFailureDefinition ) )
+                    // InternalFlaDsl.g:640:1: (lv_failures_4_0= ruleFailureDefinition )
+                    {
+                    // InternalFlaDsl.g:640:1: (lv_failures_4_0= ruleFailureDefinition )
+                    // InternalFlaDsl.g:641:3: lv_failures_4_0= ruleFailureDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_11);
+                    lv_failures_4_0=ruleFailureDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_4_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // InternalFlaDsl.g:657:2: (otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) ) )+
+                    int cnt8=0;
+                    loop8:
+                    do {
+                        int alt8=2;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0==14) ) {
+                            alt8=1;
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // InternalFlaDsl.g:657:4: otherlv_5= ',' ( (lv_failures_6_0= ruleFailureDefinition ) )
+                    	    {
+                    	    otherlv_5=(Token)match(input,14,FOLLOW_10); 
+
+                    	        	newLeafNode(otherlv_5, grammarAccess.getOutFailureExprAccess().getCommaKeyword_3_2_0());
+                    	        
+                    	    // InternalFlaDsl.g:661:1: ( (lv_failures_6_0= ruleFailureDefinition ) )
+                    	    // InternalFlaDsl.g:662:1: (lv_failures_6_0= ruleFailureDefinition )
+                    	    {
+                    	    // InternalFlaDsl.g:662:1: (lv_failures_6_0= ruleFailureDefinition )
+                    	    // InternalFlaDsl.g:663:3: lv_failures_6_0= ruleFailureDefinition
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresFailureDefinitionParserRuleCall_3_2_1_0()); 
+                    	    	    
+                    	    pushFollow(FOLLOW_12);
+                    	    lv_failures_6_0=ruleFailureDefinition();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"failures",
+                    	            		lv_failures_6_0, 
+                    	            		"org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt8 >= 1 ) break loop8;
+                                EarlyExitException eee =
+                                    new EarlyExitException(8, input);
+                                throw eee;
+                        }
+                        cnt8++;
+                    } while (true);
+
+                    otherlv_7=(Token)match(input,18,FOLLOW_2); 
+
+                        	newLeafNode(otherlv_7, grammarAccess.getOutFailureExprAccess().getRightCurlyBracketKeyword_3_3());
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // InternalFlaDsl.g:684:6: ( (lv_failures_8_0= ruleVariableDefinition ) )
+                    {
+                    // InternalFlaDsl.g:684:6: ( (lv_failures_8_0= ruleVariableDefinition ) )
+                    // InternalFlaDsl.g:685:1: (lv_failures_8_0= ruleVariableDefinition )
+                    {
+                    // InternalFlaDsl.g:685:1: (lv_failures_8_0= ruleVariableDefinition )
+                    // InternalFlaDsl.g:686:3: lv_failures_8_0= ruleVariableDefinition
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getOutFailureExprAccess().getFailuresVariableDefinitionParserRuleCall_4_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_failures_8_0=ruleVariableDefinition();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getOutFailureExprRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"failures",
+                            		lv_failures_8_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.VariableDefinition");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleOutFailureExpr"
+
+
+    // $ANTLR start "entryRuleFailureDefinition"
+    // InternalFlaDsl.g:712:1: entryRuleFailureDefinition returns [EObject current=null] : iv_ruleFailureDefinition= ruleFailureDefinition EOF ;
+    public final EObject entryRuleFailureDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleFailureDefinition = null;
+
+
+        try {
+            // InternalFlaDsl.g:713:2: (iv_ruleFailureDefinition= ruleFailureDefinition EOF )
+            // InternalFlaDsl.g:714:2: iv_ruleFailureDefinition= ruleFailureDefinition EOF
+            {
+             newCompositeNode(grammarAccess.getFailureDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleFailureDefinition=ruleFailureDefinition();
+
+            state._fsp--;
+
+             current =iv_ruleFailureDefinition; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleFailureDefinition"
+
+
+    // $ANTLR start "ruleFailureDefinition"
+    // InternalFlaDsl.g:721:1: ruleFailureDefinition returns [EObject current=null] : ( () ( (lv_type_1_0= ruleActualFailureType ) ) (otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) ) )? ) ;
+    public final EObject ruleFailureDefinition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_2=null;
+        Enumerator lv_type_1_0 = null;
+
+        EObject lv_acidAvoidable_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:724:28: ( ( () ( (lv_type_1_0= ruleActualFailureType ) ) (otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) ) )? ) )
+            // InternalFlaDsl.g:725:1: ( () ( (lv_type_1_0= ruleActualFailureType ) ) (otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) ) )? )
+            {
+            // InternalFlaDsl.g:725:1: ( () ( (lv_type_1_0= ruleActualFailureType ) ) (otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) ) )? )
+            // InternalFlaDsl.g:725:2: () ( (lv_type_1_0= ruleActualFailureType ) ) (otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) ) )?
+            {
+            // InternalFlaDsl.g:725:2: ()
+            // InternalFlaDsl.g:726:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getFailureDefinitionAccess().getFailureDefinitionAction_0(),
+                        current);
+                
+
+            }
+
+            // InternalFlaDsl.g:731:2: ( (lv_type_1_0= ruleActualFailureType ) )
+            // InternalFlaDsl.g:732:1: (lv_type_1_0= ruleActualFailureType )
+            {
+            // InternalFlaDsl.g:732:1: (lv_type_1_0= ruleActualFailureType )
+            // InternalFlaDsl.g:733:3: lv_type_1_0= ruleActualFailureType
+            {
+             
+            	        newCompositeNode(grammarAccess.getFailureDefinitionAccess().getTypeActualFailureTypeEnumRuleCall_1_0()); 
+            	    
+            pushFollow(FOLLOW_13);
+            lv_type_1_0=ruleActualFailureType();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getFailureDefinitionRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"type",
+                    		lv_type_1_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.ActualFailureType");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // InternalFlaDsl.g:749:2: (otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) ) )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==16) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // InternalFlaDsl.g:749:4: otherlv_2= '.' ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) )
+                    {
+                    otherlv_2=(Token)match(input,16,FOLLOW_14); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getFailureDefinitionAccess().getFullStopKeyword_2_0());
+                        
+                    // InternalFlaDsl.g:753:1: ( (lv_acidAvoidable_3_0= ruleACIDavoidable ) )
+                    // InternalFlaDsl.g:754:1: (lv_acidAvoidable_3_0= ruleACIDavoidable )
+                    {
+                    // InternalFlaDsl.g:754:1: (lv_acidAvoidable_3_0= ruleACIDavoidable )
+                    // InternalFlaDsl.g:755:3: lv_acidAvoidable_3_0= ruleACIDavoidable
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getFailureDefinitionAccess().getAcidAvoidableACIDavoidableParserRuleCall_2_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_acidAvoidable_3_0=ruleACIDavoidable();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getFailureDefinitionRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"acidAvoidable",
+                            		lv_acidAvoidable_3_0, 
+                            		"org.polarsys.chess.xtext.FlaDsl.ACIDavoidable");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleFailureDefinition"
+
+
+    // $ANTLR start "entryRuleNoFailureDefinition"
+    // InternalFlaDsl.g:779:1: entryRuleNoFailureDefinition returns [EObject current=null] : iv_ruleNoFailureDefinition= ruleNoFailureDefinition EOF ;
+    public final EObject entryRuleNoFailureDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleNoFailureDefinition = null;
+
+
+        try {
+            // InternalFlaDsl.g:780:2: (iv_ruleNoFailureDefinition= ruleNoFailureDefinition EOF )
+            // InternalFlaDsl.g:781:2: iv_ruleNoFailureDefinition= ruleNoFailureDefinition EOF
+            {
+             newCompositeNode(grammarAccess.getNoFailureDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleNoFailureDefinition=ruleNoFailureDefinition();
+
+            state._fsp--;
+
+             current =iv_ruleNoFailureDefinition; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleNoFailureDefinition"
+
+
+    // $ANTLR start "ruleNoFailureDefinition"
+    // InternalFlaDsl.g:788:1: ruleNoFailureDefinition returns [EObject current=null] : ( () otherlv_1= 'noFailure' ) ;
+    public final EObject ruleNoFailureDefinition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:791:28: ( ( () otherlv_1= 'noFailure' ) )
+            // InternalFlaDsl.g:792:1: ( () otherlv_1= 'noFailure' )
+            {
+            // InternalFlaDsl.g:792:1: ( () otherlv_1= 'noFailure' )
+            // InternalFlaDsl.g:792:2: () otherlv_1= 'noFailure'
+            {
+            // InternalFlaDsl.g:792:2: ()
+            // InternalFlaDsl.g:793:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getNoFailureDefinitionAccess().getNoFailureDefinitionAction_0(),
+                        current);
+                
+
+            }
+
+            otherlv_1=(Token)match(input,19,FOLLOW_2); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getNoFailureDefinitionAccess().getNoFailureKeyword_1());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleNoFailureDefinition"
+
+
+    // $ANTLR start "entryRuleComplexNofailureDefinition"
+    // InternalFlaDsl.g:810:1: entryRuleComplexNofailureDefinition returns [EObject current=null] : iv_ruleComplexNofailureDefinition= ruleComplexNofailureDefinition EOF ;
+    public final EObject entryRuleComplexNofailureDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleComplexNofailureDefinition = null;
+
+
+        try {
+            // InternalFlaDsl.g:811:2: (iv_ruleComplexNofailureDefinition= ruleComplexNofailureDefinition EOF )
+            // InternalFlaDsl.g:812:2: iv_ruleComplexNofailureDefinition= ruleComplexNofailureDefinition EOF
+            {
+             newCompositeNode(grammarAccess.getComplexNofailureDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleComplexNofailureDefinition=ruleComplexNofailureDefinition();
+
+            state._fsp--;
+
+             current =iv_ruleComplexNofailureDefinition; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleComplexNofailureDefinition"
+
+
+    // $ANTLR start "ruleComplexNofailureDefinition"
+    // InternalFlaDsl.g:819:1: ruleComplexNofailureDefinition returns [EObject current=null] : ( () otherlv_1= 'noFailure' otherlv_2= '.' ( (lv_acidMitigation_3_0= ruleACIDMitigation ) ) ) ;
+    public final EObject ruleComplexNofailureDefinition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+        EObject lv_acidMitigation_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:822:28: ( ( () otherlv_1= 'noFailure' otherlv_2= '.' ( (lv_acidMitigation_3_0= ruleACIDMitigation ) ) ) )
+            // InternalFlaDsl.g:823:1: ( () otherlv_1= 'noFailure' otherlv_2= '.' ( (lv_acidMitigation_3_0= ruleACIDMitigation ) ) )
+            {
+            // InternalFlaDsl.g:823:1: ( () otherlv_1= 'noFailure' otherlv_2= '.' ( (lv_acidMitigation_3_0= ruleACIDMitigation ) ) )
+            // InternalFlaDsl.g:823:2: () otherlv_1= 'noFailure' otherlv_2= '.' ( (lv_acidMitigation_3_0= ruleACIDMitigation ) )
+            {
+            // InternalFlaDsl.g:823:2: ()
+            // InternalFlaDsl.g:824:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureDefinitionAction_0(),
+                        current);
+                
+
+            }
+
+            otherlv_1=(Token)match(input,19,FOLLOW_8); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getComplexNofailureDefinitionAccess().getNoFailureKeyword_1());
+                
+            otherlv_2=(Token)match(input,16,FOLLOW_15); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getComplexNofailureDefinitionAccess().getFullStopKeyword_2());
+                
+            // InternalFlaDsl.g:837:1: ( (lv_acidMitigation_3_0= ruleACIDMitigation ) )
+            // InternalFlaDsl.g:838:1: (lv_acidMitigation_3_0= ruleACIDMitigation )
+            {
+            // InternalFlaDsl.g:838:1: (lv_acidMitigation_3_0= ruleACIDMitigation )
+            // InternalFlaDsl.g:839:3: lv_acidMitigation_3_0= ruleACIDMitigation
+            {
+             
+            	        newCompositeNode(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0()); 
+            	    
+            pushFollow(FOLLOW_2);
+            lv_acidMitigation_3_0=ruleACIDMitigation();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getComplexNofailureDefinitionRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"acidMitigation",
+                    		lv_acidMitigation_3_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.ACIDMitigation");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleComplexNofailureDefinition"
+
+
+    // $ANTLR start "entryRuleWildcardDefinition"
+    // InternalFlaDsl.g:863:1: entryRuleWildcardDefinition returns [EObject current=null] : iv_ruleWildcardDefinition= ruleWildcardDefinition EOF ;
+    public final EObject entryRuleWildcardDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleWildcardDefinition = null;
+
+
+        try {
+            // InternalFlaDsl.g:864:2: (iv_ruleWildcardDefinition= ruleWildcardDefinition EOF )
+            // InternalFlaDsl.g:865:2: iv_ruleWildcardDefinition= ruleWildcardDefinition EOF
+            {
+             newCompositeNode(grammarAccess.getWildcardDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleWildcardDefinition=ruleWildcardDefinition();
+
+            state._fsp--;
+
+             current =iv_ruleWildcardDefinition; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleWildcardDefinition"
+
+
+    // $ANTLR start "ruleWildcardDefinition"
+    // InternalFlaDsl.g:872:1: ruleWildcardDefinition returns [EObject current=null] : ( () otherlv_1= 'wildcard' ) ;
+    public final EObject ruleWildcardDefinition() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:875:28: ( ( () otherlv_1= 'wildcard' ) )
+            // InternalFlaDsl.g:876:1: ( () otherlv_1= 'wildcard' )
+            {
+            // InternalFlaDsl.g:876:1: ( () otherlv_1= 'wildcard' )
+            // InternalFlaDsl.g:876:2: () otherlv_1= 'wildcard'
+            {
+            // InternalFlaDsl.g:876:2: ()
+            // InternalFlaDsl.g:877:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getWildcardDefinitionAccess().getWildcardDefinitionAction_0(),
+                        current);
+                
+
+            }
+
+            otherlv_1=(Token)match(input,20,FOLLOW_2); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getWildcardDefinitionAccess().getWildcardKeyword_1());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleWildcardDefinition"
+
+
+    // $ANTLR start "entryRuleVariableDefinition"
+    // InternalFlaDsl.g:894:1: entryRuleVariableDefinition returns [EObject current=null] : iv_ruleVariableDefinition= ruleVariableDefinition EOF ;
+    public final EObject entryRuleVariableDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleVariableDefinition = null;
+
+
+        try {
+            // InternalFlaDsl.g:895:2: (iv_ruleVariableDefinition= ruleVariableDefinition EOF )
+            // InternalFlaDsl.g:896:2: iv_ruleVariableDefinition= ruleVariableDefinition EOF
+            {
+             newCompositeNode(grammarAccess.getVariableDefinitionRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleVariableDefinition=ruleVariableDefinition();
+
+            state._fsp--;
+
+             current =iv_ruleVariableDefinition; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleVariableDefinition"
+
+
+    // $ANTLR start "ruleVariableDefinition"
+    // InternalFlaDsl.g:903:1: ruleVariableDefinition returns [EObject current=null] : ( () ( (lv_variableName_1_0= RULE_ID ) ) ) ;
+    public final EObject ruleVariableDefinition() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_variableName_1_0=null;
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:906:28: ( ( () ( (lv_variableName_1_0= RULE_ID ) ) ) )
+            // InternalFlaDsl.g:907:1: ( () ( (lv_variableName_1_0= RULE_ID ) ) )
+            {
+            // InternalFlaDsl.g:907:1: ( () ( (lv_variableName_1_0= RULE_ID ) ) )
+            // InternalFlaDsl.g:907:2: () ( (lv_variableName_1_0= RULE_ID ) )
+            {
+            // InternalFlaDsl.g:907:2: ()
+            // InternalFlaDsl.g:908:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getVariableDefinitionAccess().getVariableDefinitionAction_0(),
+                        current);
+                
+
+            }
+
+            // InternalFlaDsl.g:913:2: ( (lv_variableName_1_0= RULE_ID ) )
+            // InternalFlaDsl.g:914:1: (lv_variableName_1_0= RULE_ID )
+            {
+            // InternalFlaDsl.g:914:1: (lv_variableName_1_0= RULE_ID )
+            // InternalFlaDsl.g:915:3: lv_variableName_1_0= RULE_ID
+            {
+            lv_variableName_1_0=(Token)match(input,RULE_ID,FOLLOW_2); 
+
+            			newLeafNode(lv_variableName_1_0, grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getVariableDefinitionRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"variableName",
+                    		lv_variableName_1_0, 
+                    		"org.eclipse.xtext.common.Terminals.ID");
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleVariableDefinition"
+
+
+    // $ANTLR start "entryRuleACIDavoidable"
+    // InternalFlaDsl.g:939:1: entryRuleACIDavoidable returns [EObject current=null] : iv_ruleACIDavoidable= ruleACIDavoidable EOF ;
+    public final EObject entryRuleACIDavoidable() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleACIDavoidable = null;
+
+
+        try {
+            // InternalFlaDsl.g:940:2: (iv_ruleACIDavoidable= ruleACIDavoidable EOF )
+            // InternalFlaDsl.g:941:2: iv_ruleACIDavoidable= ruleACIDavoidable EOF
+            {
+             newCompositeNode(grammarAccess.getACIDavoidableRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleACIDavoidable=ruleACIDavoidable();
+
+            state._fsp--;
+
+             current =iv_ruleACIDavoidable; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleACIDavoidable"
+
+
+    // $ANTLR start "ruleACIDavoidable"
+    // InternalFlaDsl.g:948:1: ruleACIDavoidable returns [EObject current=null] : ( ( (lv_a_0_0= ruleAavoidable ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCavoidable ) ) otherlv_3= '.' ( (lv_i_4_0= ruleIavoidable ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDavoidable ) ) ) ;
+    public final EObject ruleACIDavoidable() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Enumerator lv_a_0_0 = null;
+
+        Enumerator lv_c_2_0 = null;
+
+        Enumerator lv_i_4_0 = null;
+
+        Enumerator lv_d_6_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:951:28: ( ( ( (lv_a_0_0= ruleAavoidable ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCavoidable ) ) otherlv_3= '.' ( (lv_i_4_0= ruleIavoidable ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDavoidable ) ) ) )
+            // InternalFlaDsl.g:952:1: ( ( (lv_a_0_0= ruleAavoidable ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCavoidable ) ) otherlv_3= '.' ( (lv_i_4_0= ruleIavoidable ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDavoidable ) ) )
+            {
+            // InternalFlaDsl.g:952:1: ( ( (lv_a_0_0= ruleAavoidable ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCavoidable ) ) otherlv_3= '.' ( (lv_i_4_0= ruleIavoidable ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDavoidable ) ) )
+            // InternalFlaDsl.g:952:2: ( (lv_a_0_0= ruleAavoidable ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCavoidable ) ) otherlv_3= '.' ( (lv_i_4_0= ruleIavoidable ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDavoidable ) )
+            {
+            // InternalFlaDsl.g:952:2: ( (lv_a_0_0= ruleAavoidable ) )
+            // InternalFlaDsl.g:953:1: (lv_a_0_0= ruleAavoidable )
+            {
+            // InternalFlaDsl.g:953:1: (lv_a_0_0= ruleAavoidable )
+            // InternalFlaDsl.g:954:3: lv_a_0_0= ruleAavoidable
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0()); 
+            	    
+            pushFollow(FOLLOW_8);
+            lv_a_0_0=ruleAavoidable();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"a",
+                    		lv_a_0_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Aavoidable");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_1=(Token)match(input,16,FOLLOW_16); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getACIDavoidableAccess().getFullStopKeyword_1());
+                
+            // InternalFlaDsl.g:974:1: ( (lv_c_2_0= ruleCavoidable ) )
+            // InternalFlaDsl.g:975:1: (lv_c_2_0= ruleCavoidable )
+            {
+            // InternalFlaDsl.g:975:1: (lv_c_2_0= ruleCavoidable )
+            // InternalFlaDsl.g:976:3: lv_c_2_0= ruleCavoidable
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0()); 
+            	    
+            pushFollow(FOLLOW_8);
+            lv_c_2_0=ruleCavoidable();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"c",
+                    		lv_c_2_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Cavoidable");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_3=(Token)match(input,16,FOLLOW_17); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getACIDavoidableAccess().getFullStopKeyword_3());
+                
+            // InternalFlaDsl.g:996:1: ( (lv_i_4_0= ruleIavoidable ) )
+            // InternalFlaDsl.g:997:1: (lv_i_4_0= ruleIavoidable )
+            {
+            // InternalFlaDsl.g:997:1: (lv_i_4_0= ruleIavoidable )
+            // InternalFlaDsl.g:998:3: lv_i_4_0= ruleIavoidable
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0()); 
+            	    
+            pushFollow(FOLLOW_8);
+            lv_i_4_0=ruleIavoidable();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"i",
+                    		lv_i_4_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Iavoidable");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,16,FOLLOW_18); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getACIDavoidableAccess().getFullStopKeyword_5());
+                
+            // InternalFlaDsl.g:1018:1: ( (lv_d_6_0= ruleDavoidable ) )
+            // InternalFlaDsl.g:1019:1: (lv_d_6_0= ruleDavoidable )
+            {
+            // InternalFlaDsl.g:1019:1: (lv_d_6_0= ruleDavoidable )
+            // InternalFlaDsl.g:1020:3: lv_d_6_0= ruleDavoidable
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0()); 
+            	    
+            pushFollow(FOLLOW_2);
+            lv_d_6_0=ruleDavoidable();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDavoidableRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"d",
+                    		lv_d_6_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Davoidable");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleACIDavoidable"
+
+
+    // $ANTLR start "entryRuleACIDMitigation"
+    // InternalFlaDsl.g:1044:1: entryRuleACIDMitigation returns [EObject current=null] : iv_ruleACIDMitigation= ruleACIDMitigation EOF ;
+    public final EObject entryRuleACIDMitigation() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleACIDMitigation = null;
+
+
+        try {
+            // InternalFlaDsl.g:1045:2: (iv_ruleACIDMitigation= ruleACIDMitigation EOF )
+            // InternalFlaDsl.g:1046:2: iv_ruleACIDMitigation= ruleACIDMitigation EOF
+            {
+             newCompositeNode(grammarAccess.getACIDMitigationRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleACIDMitigation=ruleACIDMitigation();
+
+            state._fsp--;
+
+             current =iv_ruleACIDMitigation; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleACIDMitigation"
+
+
+    // $ANTLR start "ruleACIDMitigation"
+    // InternalFlaDsl.g:1053:1: ruleACIDMitigation returns [EObject current=null] : ( ( (lv_a_0_0= ruleAmitigation ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCmitigation ) ) otherlv_3= '.' ( (lv_i_4_0= ruleImitigation ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDmitigation ) ) ) ;
+    public final EObject ruleACIDMitigation() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Enumerator lv_a_0_0 = null;
+
+        Enumerator lv_c_2_0 = null;
+
+        Enumerator lv_i_4_0 = null;
+
+        Enumerator lv_d_6_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalFlaDsl.g:1056:28: ( ( ( (lv_a_0_0= ruleAmitigation ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCmitigation ) ) otherlv_3= '.' ( (lv_i_4_0= ruleImitigation ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDmitigation ) ) ) )
+            // InternalFlaDsl.g:1057:1: ( ( (lv_a_0_0= ruleAmitigation ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCmitigation ) ) otherlv_3= '.' ( (lv_i_4_0= ruleImitigation ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDmitigation ) ) )
+            {
+            // InternalFlaDsl.g:1057:1: ( ( (lv_a_0_0= ruleAmitigation ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCmitigation ) ) otherlv_3= '.' ( (lv_i_4_0= ruleImitigation ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDmitigation ) ) )
+            // InternalFlaDsl.g:1057:2: ( (lv_a_0_0= ruleAmitigation ) ) otherlv_1= '.' ( (lv_c_2_0= ruleCmitigation ) ) otherlv_3= '.' ( (lv_i_4_0= ruleImitigation ) ) otherlv_5= '.' ( (lv_d_6_0= ruleDmitigation ) )
+            {
+            // InternalFlaDsl.g:1057:2: ( (lv_a_0_0= ruleAmitigation ) )
+            // InternalFlaDsl.g:1058:1: (lv_a_0_0= ruleAmitigation )
+            {
+            // InternalFlaDsl.g:1058:1: (lv_a_0_0= ruleAmitigation )
+            // InternalFlaDsl.g:1059:3: lv_a_0_0= ruleAmitigation
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0()); 
+            	    
+            pushFollow(FOLLOW_8);
+            lv_a_0_0=ruleAmitigation();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"a",
+                    		lv_a_0_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Amitigation");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_1=(Token)match(input,16,FOLLOW_19); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getACIDMitigationAccess().getFullStopKeyword_1());
+                
+            // InternalFlaDsl.g:1079:1: ( (lv_c_2_0= ruleCmitigation ) )
+            // InternalFlaDsl.g:1080:1: (lv_c_2_0= ruleCmitigation )
+            {
+            // InternalFlaDsl.g:1080:1: (lv_c_2_0= ruleCmitigation )
+            // InternalFlaDsl.g:1081:3: lv_c_2_0= ruleCmitigation
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0()); 
+            	    
+            pushFollow(FOLLOW_8);
+            lv_c_2_0=ruleCmitigation();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"c",
+                    		lv_c_2_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Cmitigation");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_3=(Token)match(input,16,FOLLOW_20); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getACIDMitigationAccess().getFullStopKeyword_3());
+                
+            // InternalFlaDsl.g:1101:1: ( (lv_i_4_0= ruleImitigation ) )
+            // InternalFlaDsl.g:1102:1: (lv_i_4_0= ruleImitigation )
+            {
+            // InternalFlaDsl.g:1102:1: (lv_i_4_0= ruleImitigation )
+            // InternalFlaDsl.g:1103:3: lv_i_4_0= ruleImitigation
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0()); 
+            	    
+            pushFollow(FOLLOW_8);
+            lv_i_4_0=ruleImitigation();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"i",
+                    		lv_i_4_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Imitigation");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,16,FOLLOW_21); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getACIDMitigationAccess().getFullStopKeyword_5());
+                
+            // InternalFlaDsl.g:1123:1: ( (lv_d_6_0= ruleDmitigation ) )
+            // InternalFlaDsl.g:1124:1: (lv_d_6_0= ruleDmitigation )
+            {
+            // InternalFlaDsl.g:1124:1: (lv_d_6_0= ruleDmitigation )
+            // InternalFlaDsl.g:1125:3: lv_d_6_0= ruleDmitigation
+            {
+             
+            	        newCompositeNode(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0()); 
+            	    
+            pushFollow(FOLLOW_2);
+            lv_d_6_0=ruleDmitigation();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getACIDMitigationRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"d",
+                    		lv_d_6_0, 
+                    		"org.polarsys.chess.xtext.FlaDsl.Dmitigation");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleACIDMitigation"
+
+
+    // $ANTLR start "ruleActualFailureType"
+    // InternalFlaDsl.g:1153:1: ruleActualFailureType returns [Enumerator current=null] : ( (enumLiteral_0= 'early' ) | (enumLiteral_1= 'late' ) | (enumLiteral_2= 'commission' ) | (enumLiteral_3= 'omission' ) | (enumLiteral_4= 'valueSubtle' ) | (enumLiteral_5= 'valueCoarse' ) ) ;
+    public final Enumerator ruleActualFailureType() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+        Token enumLiteral_4=null;
+        Token enumLiteral_5=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1155:28: ( ( (enumLiteral_0= 'early' ) | (enumLiteral_1= 'late' ) | (enumLiteral_2= 'commission' ) | (enumLiteral_3= 'omission' ) | (enumLiteral_4= 'valueSubtle' ) | (enumLiteral_5= 'valueCoarse' ) ) )
+            // InternalFlaDsl.g:1156:1: ( (enumLiteral_0= 'early' ) | (enumLiteral_1= 'late' ) | (enumLiteral_2= 'commission' ) | (enumLiteral_3= 'omission' ) | (enumLiteral_4= 'valueSubtle' ) | (enumLiteral_5= 'valueCoarse' ) )
+            {
+            // InternalFlaDsl.g:1156:1: ( (enumLiteral_0= 'early' ) | (enumLiteral_1= 'late' ) | (enumLiteral_2= 'commission' ) | (enumLiteral_3= 'omission' ) | (enumLiteral_4= 'valueSubtle' ) | (enumLiteral_5= 'valueCoarse' ) )
+            int alt11=6;
+            switch ( input.LA(1) ) {
+            case 21:
+                {
+                alt11=1;
+                }
+                break;
+            case 22:
+                {
+                alt11=2;
+                }
+                break;
+            case 23:
+                {
+                alt11=3;
+                }
+                break;
+            case 24:
+                {
+                alt11=4;
+                }
+                break;
+            case 25:
+                {
+                alt11=5;
+                }
+                break;
+            case 26:
+                {
+                alt11=6;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 11, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt11) {
+                case 1 :
+                    // InternalFlaDsl.g:1156:2: (enumLiteral_0= 'early' )
+                    {
+                    // InternalFlaDsl.g:1156:2: (enumLiteral_0= 'early' )
+                    // InternalFlaDsl.g:1156:4: enumLiteral_0= 'early'
+                    {
+                    enumLiteral_0=(Token)match(input,21,FOLLOW_2); 
+
+                            current = grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getActualFailureTypeAccess().getEARLYEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1162:6: (enumLiteral_1= 'late' )
+                    {
+                    // InternalFlaDsl.g:1162:6: (enumLiteral_1= 'late' )
+                    // InternalFlaDsl.g:1162:8: enumLiteral_1= 'late'
+                    {
+                    enumLiteral_1=(Token)match(input,22,FOLLOW_2); 
+
+                            current = grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getActualFailureTypeAccess().getLATEEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1168:6: (enumLiteral_2= 'commission' )
+                    {
+                    // InternalFlaDsl.g:1168:6: (enumLiteral_2= 'commission' )
+                    // InternalFlaDsl.g:1168:8: enumLiteral_2= 'commission'
+                    {
+                    enumLiteral_2=(Token)match(input,23,FOLLOW_2); 
+
+                            current = grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getActualFailureTypeAccess().getCOMMISSIONEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1174:6: (enumLiteral_3= 'omission' )
+                    {
+                    // InternalFlaDsl.g:1174:6: (enumLiteral_3= 'omission' )
+                    // InternalFlaDsl.g:1174:8: enumLiteral_3= 'omission'
+                    {
+                    enumLiteral_3=(Token)match(input,24,FOLLOW_2); 
+
+                            current = grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getActualFailureTypeAccess().getOMISSIONEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // InternalFlaDsl.g:1180:6: (enumLiteral_4= 'valueSubtle' )
+                    {
+                    // InternalFlaDsl.g:1180:6: (enumLiteral_4= 'valueSubtle' )
+                    // InternalFlaDsl.g:1180:8: enumLiteral_4= 'valueSubtle'
+                    {
+                    enumLiteral_4=(Token)match(input,25,FOLLOW_2); 
+
+                            current = grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_4, grammarAccess.getActualFailureTypeAccess().getVALUE_SUBTLEEnumLiteralDeclaration_4()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // InternalFlaDsl.g:1186:6: (enumLiteral_5= 'valueCoarse' )
+                    {
+                    // InternalFlaDsl.g:1186:6: (enumLiteral_5= 'valueCoarse' )
+                    // InternalFlaDsl.g:1186:8: enumLiteral_5= 'valueCoarse'
+                    {
+                    enumLiteral_5=(Token)match(input,26,FOLLOW_2); 
+
+                            current = grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_5, grammarAccess.getActualFailureTypeAccess().getVALUE_COARSEEnumLiteralDeclaration_5()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleActualFailureType"
+
+
+    // $ANTLR start "ruleAavoidable"
+    // InternalFlaDsl.g:1200:1: ruleAavoidable returns [Enumerator current=null] : ( (enumLiteral_0= 'incompletion' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) ;
+    public final Enumerator ruleAavoidable() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1202:28: ( ( (enumLiteral_0= 'incompletion' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1203:1: ( (enumLiteral_0= 'incompletion' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1203:1: ( (enumLiteral_0= 'incompletion' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            int alt12=3;
+            switch ( input.LA(1) ) {
+            case 27:
+                {
+                alt12=1;
+                }
+                break;
+            case 28:
+                {
+                alt12=2;
+                }
+                break;
+            case 29:
+                {
+                alt12=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt12) {
+                case 1 :
+                    // InternalFlaDsl.g:1203:2: (enumLiteral_0= 'incompletion' )
+                    {
+                    // InternalFlaDsl.g:1203:2: (enumLiteral_0= 'incompletion' )
+                    // InternalFlaDsl.g:1203:4: enumLiteral_0= 'incompletion'
+                    {
+                    enumLiteral_0=(Token)match(input,27,FOLLOW_2); 
+
+                            current = grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getAavoidableAccess().getINCOMPLETIONEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1209:6: (enumLiteral_1= 'none' )
+                    {
+                    // InternalFlaDsl.g:1209:6: (enumLiteral_1= 'none' )
+                    // InternalFlaDsl.g:1209:8: enumLiteral_1= 'none'
+                    {
+                    enumLiteral_1=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getAavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1215:6: (enumLiteral_2= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1215:6: (enumLiteral_2= 'unspecified' )
+                    // InternalFlaDsl.g:1215:8: enumLiteral_2= 'unspecified'
+                    {
+                    enumLiteral_2=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getAavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAavoidable"
+
+
+    // $ANTLR start "ruleCavoidable"
+    // InternalFlaDsl.g:1225:1: ruleCavoidable returns [Enumerator current=null] : ( (enumLiteral_0= 'inconsistency' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) ;
+    public final Enumerator ruleCavoidable() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1227:28: ( ( (enumLiteral_0= 'inconsistency' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1228:1: ( (enumLiteral_0= 'inconsistency' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1228:1: ( (enumLiteral_0= 'inconsistency' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            int alt13=3;
+            switch ( input.LA(1) ) {
+            case 30:
+                {
+                alt13=1;
+                }
+                break;
+            case 28:
+                {
+                alt13=2;
+                }
+                break;
+            case 29:
+                {
+                alt13=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 13, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt13) {
+                case 1 :
+                    // InternalFlaDsl.g:1228:2: (enumLiteral_0= 'inconsistency' )
+                    {
+                    // InternalFlaDsl.g:1228:2: (enumLiteral_0= 'inconsistency' )
+                    // InternalFlaDsl.g:1228:4: enumLiteral_0= 'inconsistency'
+                    {
+                    enumLiteral_0=(Token)match(input,30,FOLLOW_2); 
+
+                            current = grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getCavoidableAccess().getINCONSISTENCYEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1234:6: (enumLiteral_1= 'none' )
+                    {
+                    // InternalFlaDsl.g:1234:6: (enumLiteral_1= 'none' )
+                    // InternalFlaDsl.g:1234:8: enumLiteral_1= 'none'
+                    {
+                    enumLiteral_1=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getCavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1240:6: (enumLiteral_2= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1240:6: (enumLiteral_2= 'unspecified' )
+                    // InternalFlaDsl.g:1240:8: enumLiteral_2= 'unspecified'
+                    {
+                    enumLiteral_2=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getCavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCavoidable"
+
+
+    // $ANTLR start "ruleIavoidable"
+    // InternalFlaDsl.g:1250:1: ruleIavoidable returns [Enumerator current=null] : ( (enumLiteral_0= 'interference' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) ;
+    public final Enumerator ruleIavoidable() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1252:28: ( ( (enumLiteral_0= 'interference' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1253:1: ( (enumLiteral_0= 'interference' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1253:1: ( (enumLiteral_0= 'interference' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            int alt14=3;
+            switch ( input.LA(1) ) {
+            case 31:
+                {
+                alt14=1;
+                }
+                break;
+            case 28:
+                {
+                alt14=2;
+                }
+                break;
+            case 29:
+                {
+                alt14=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 14, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt14) {
+                case 1 :
+                    // InternalFlaDsl.g:1253:2: (enumLiteral_0= 'interference' )
+                    {
+                    // InternalFlaDsl.g:1253:2: (enumLiteral_0= 'interference' )
+                    // InternalFlaDsl.g:1253:4: enumLiteral_0= 'interference'
+                    {
+                    enumLiteral_0=(Token)match(input,31,FOLLOW_2); 
+
+                            current = grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getIavoidableAccess().getINTERFERENCEEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1259:6: (enumLiteral_1= 'none' )
+                    {
+                    // InternalFlaDsl.g:1259:6: (enumLiteral_1= 'none' )
+                    // InternalFlaDsl.g:1259:8: enumLiteral_1= 'none'
+                    {
+                    enumLiteral_1=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getIavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1265:6: (enumLiteral_2= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1265:6: (enumLiteral_2= 'unspecified' )
+                    // InternalFlaDsl.g:1265:8: enumLiteral_2= 'unspecified'
+                    {
+                    enumLiteral_2=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getIavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleIavoidable"
+
+
+    // $ANTLR start "ruleDavoidable"
+    // InternalFlaDsl.g:1275:1: ruleDavoidable returns [Enumerator current=null] : ( (enumLiteral_0= 'impermanence' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) ;
+    public final Enumerator ruleDavoidable() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1277:28: ( ( (enumLiteral_0= 'impermanence' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1278:1: ( (enumLiteral_0= 'impermanence' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1278:1: ( (enumLiteral_0= 'impermanence' ) | (enumLiteral_1= 'none' ) | (enumLiteral_2= 'unspecified' ) )
+            int alt15=3;
+            switch ( input.LA(1) ) {
+            case 32:
+                {
+                alt15=1;
+                }
+                break;
+            case 28:
+                {
+                alt15=2;
+                }
+                break;
+            case 29:
+                {
+                alt15=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 15, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt15) {
+                case 1 :
+                    // InternalFlaDsl.g:1278:2: (enumLiteral_0= 'impermanence' )
+                    {
+                    // InternalFlaDsl.g:1278:2: (enumLiteral_0= 'impermanence' )
+                    // InternalFlaDsl.g:1278:4: enumLiteral_0= 'impermanence'
+                    {
+                    enumLiteral_0=(Token)match(input,32,FOLLOW_2); 
+
+                            current = grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getDavoidableAccess().getIMPERMANENCEEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1284:6: (enumLiteral_1= 'none' )
+                    {
+                    // InternalFlaDsl.g:1284:6: (enumLiteral_1= 'none' )
+                    // InternalFlaDsl.g:1284:8: enumLiteral_1= 'none'
+                    {
+                    enumLiteral_1=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getDavoidableAccess().getNONEEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1290:6: (enumLiteral_2= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1290:6: (enumLiteral_2= 'unspecified' )
+                    // InternalFlaDsl.g:1290:8: enumLiteral_2= 'unspecified'
+                    {
+                    enumLiteral_2=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getDavoidableAccess().getUNSPECIFIEDEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDavoidable"
+
+
+    // $ANTLR start "ruleAmitigation"
+    // InternalFlaDsl.g:1300:1: ruleAmitigation returns [Enumerator current=null] : ( (enumLiteral_0= 'all_or_nothing' ) | (enumLiteral_1= 'all_or_compensation' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) ;
+    public final Enumerator ruleAmitigation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1302:28: ( ( (enumLiteral_0= 'all_or_nothing' ) | (enumLiteral_1= 'all_or_compensation' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1303:1: ( (enumLiteral_0= 'all_or_nothing' ) | (enumLiteral_1= 'all_or_compensation' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1303:1: ( (enumLiteral_0= 'all_or_nothing' ) | (enumLiteral_1= 'all_or_compensation' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            int alt16=4;
+            switch ( input.LA(1) ) {
+            case 33:
+                {
+                alt16=1;
+                }
+                break;
+            case 34:
+                {
+                alt16=2;
+                }
+                break;
+            case 28:
+                {
+                alt16=3;
+                }
+                break;
+            case 29:
+                {
+                alt16=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 16, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt16) {
+                case 1 :
+                    // InternalFlaDsl.g:1303:2: (enumLiteral_0= 'all_or_nothing' )
+                    {
+                    // InternalFlaDsl.g:1303:2: (enumLiteral_0= 'all_or_nothing' )
+                    // InternalFlaDsl.g:1303:4: enumLiteral_0= 'all_or_nothing'
+                    {
+                    enumLiteral_0=(Token)match(input,33,FOLLOW_2); 
+
+                            current = grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getAmitigationAccess().getALL_OR_NOTHINGEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1309:6: (enumLiteral_1= 'all_or_compensation' )
+                    {
+                    // InternalFlaDsl.g:1309:6: (enumLiteral_1= 'all_or_compensation' )
+                    // InternalFlaDsl.g:1309:8: enumLiteral_1= 'all_or_compensation'
+                    {
+                    enumLiteral_1=(Token)match(input,34,FOLLOW_2); 
+
+                            current = grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getAmitigationAccess().getALL_OR_COMPENSATIONEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1315:6: (enumLiteral_2= 'none' )
+                    {
+                    // InternalFlaDsl.g:1315:6: (enumLiteral_2= 'none' )
+                    // InternalFlaDsl.g:1315:8: enumLiteral_2= 'none'
+                    {
+                    enumLiteral_2=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getAmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1321:6: (enumLiteral_3= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1321:6: (enumLiteral_3= 'unspecified' )
+                    // InternalFlaDsl.g:1321:8: enumLiteral_3= 'unspecified'
+                    {
+                    enumLiteral_3=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getAmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAmitigation"
+
+
+    // $ANTLR start "ruleCmitigation"
+    // InternalFlaDsl.g:1331:1: ruleCmitigation returns [Enumerator current=null] : ( (enumLiteral_0= 'full_consistency' ) | (enumLiteral_1= 'range_violation_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) ;
+    public final Enumerator ruleCmitigation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1333:28: ( ( (enumLiteral_0= 'full_consistency' ) | (enumLiteral_1= 'range_violation_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1334:1: ( (enumLiteral_0= 'full_consistency' ) | (enumLiteral_1= 'range_violation_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1334:1: ( (enumLiteral_0= 'full_consistency' ) | (enumLiteral_1= 'range_violation_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            int alt17=4;
+            switch ( input.LA(1) ) {
+            case 35:
+                {
+                alt17=1;
+                }
+                break;
+            case 36:
+                {
+                alt17=2;
+                }
+                break;
+            case 28:
+                {
+                alt17=3;
+                }
+                break;
+            case 29:
+                {
+                alt17=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 17, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt17) {
+                case 1 :
+                    // InternalFlaDsl.g:1334:2: (enumLiteral_0= 'full_consistency' )
+                    {
+                    // InternalFlaDsl.g:1334:2: (enumLiteral_0= 'full_consistency' )
+                    // InternalFlaDsl.g:1334:4: enumLiteral_0= 'full_consistency'
+                    {
+                    enumLiteral_0=(Token)match(input,35,FOLLOW_2); 
+
+                            current = grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getCmitigationAccess().getFULL_CONSISTENCYEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1340:6: (enumLiteral_1= 'range_violation_allowed' )
+                    {
+                    // InternalFlaDsl.g:1340:6: (enumLiteral_1= 'range_violation_allowed' )
+                    // InternalFlaDsl.g:1340:8: enumLiteral_1= 'range_violation_allowed'
+                    {
+                    enumLiteral_1=(Token)match(input,36,FOLLOW_2); 
+
+                            current = grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getCmitigationAccess().getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1346:6: (enumLiteral_2= 'none' )
+                    {
+                    // InternalFlaDsl.g:1346:6: (enumLiteral_2= 'none' )
+                    // InternalFlaDsl.g:1346:8: enumLiteral_2= 'none'
+                    {
+                    enumLiteral_2=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getCmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1352:6: (enumLiteral_3= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1352:6: (enumLiteral_3= 'unspecified' )
+                    // InternalFlaDsl.g:1352:8: enumLiteral_3= 'unspecified'
+                    {
+                    enumLiteral_3=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getCmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCmitigation"
+
+
+    // $ANTLR start "ruleImitigation"
+    // InternalFlaDsl.g:1362:1: ruleImitigation returns [Enumerator current=null] : ( (enumLiteral_0= 'serializable' ) | (enumLiteral_1= 'portable_level' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) ;
+    public final Enumerator ruleImitigation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1364:28: ( ( (enumLiteral_0= 'serializable' ) | (enumLiteral_1= 'portable_level' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1365:1: ( (enumLiteral_0= 'serializable' ) | (enumLiteral_1= 'portable_level' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1365:1: ( (enumLiteral_0= 'serializable' ) | (enumLiteral_1= 'portable_level' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            int alt18=4;
+            switch ( input.LA(1) ) {
+            case 37:
+                {
+                alt18=1;
+                }
+                break;
+            case 38:
+                {
+                alt18=2;
+                }
+                break;
+            case 28:
+                {
+                alt18=3;
+                }
+                break;
+            case 29:
+                {
+                alt18=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 18, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt18) {
+                case 1 :
+                    // InternalFlaDsl.g:1365:2: (enumLiteral_0= 'serializable' )
+                    {
+                    // InternalFlaDsl.g:1365:2: (enumLiteral_0= 'serializable' )
+                    // InternalFlaDsl.g:1365:4: enumLiteral_0= 'serializable'
+                    {
+                    enumLiteral_0=(Token)match(input,37,FOLLOW_2); 
+
+                            current = grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getImitigationAccess().getSERIALIZABLEEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1371:6: (enumLiteral_1= 'portable_level' )
+                    {
+                    // InternalFlaDsl.g:1371:6: (enumLiteral_1= 'portable_level' )
+                    // InternalFlaDsl.g:1371:8: enumLiteral_1= 'portable_level'
+                    {
+                    enumLiteral_1=(Token)match(input,38,FOLLOW_2); 
+
+                            current = grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getImitigationAccess().getPORTABLE_LEVELEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1377:6: (enumLiteral_2= 'none' )
+                    {
+                    // InternalFlaDsl.g:1377:6: (enumLiteral_2= 'none' )
+                    // InternalFlaDsl.g:1377:8: enumLiteral_2= 'none'
+                    {
+                    enumLiteral_2=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getImitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1383:6: (enumLiteral_3= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1383:6: (enumLiteral_3= 'unspecified' )
+                    // InternalFlaDsl.g:1383:8: enumLiteral_3= 'unspecified'
+                    {
+                    enumLiteral_3=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getImitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleImitigation"
+
+
+    // $ANTLR start "ruleDmitigation"
+    // InternalFlaDsl.g:1393:1: ruleDmitigation returns [Enumerator current=null] : ( (enumLiteral_0= 'no_loss' ) | (enumLiteral_1= 'partial_loss_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) ;
+    public final Enumerator ruleDmitigation() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+
+         enterRule(); 
+        try {
+            // InternalFlaDsl.g:1395:28: ( ( (enumLiteral_0= 'no_loss' ) | (enumLiteral_1= 'partial_loss_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) ) )
+            // InternalFlaDsl.g:1396:1: ( (enumLiteral_0= 'no_loss' ) | (enumLiteral_1= 'partial_loss_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            {
+            // InternalFlaDsl.g:1396:1: ( (enumLiteral_0= 'no_loss' ) | (enumLiteral_1= 'partial_loss_allowed' ) | (enumLiteral_2= 'none' ) | (enumLiteral_3= 'unspecified' ) )
+            int alt19=4;
+            switch ( input.LA(1) ) {
+            case 39:
+                {
+                alt19=1;
+                }
+                break;
+            case 40:
+                {
+                alt19=2;
+                }
+                break;
+            case 28:
+                {
+                alt19=3;
+                }
+                break;
+            case 29:
+                {
+                alt19=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 19, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt19) {
+                case 1 :
+                    // InternalFlaDsl.g:1396:2: (enumLiteral_0= 'no_loss' )
+                    {
+                    // InternalFlaDsl.g:1396:2: (enumLiteral_0= 'no_loss' )
+                    // InternalFlaDsl.g:1396:4: enumLiteral_0= 'no_loss'
+                    {
+                    enumLiteral_0=(Token)match(input,39,FOLLOW_2); 
+
+                            current = grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getDmitigationAccess().getNO_LOSSEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalFlaDsl.g:1402:6: (enumLiteral_1= 'partial_loss_allowed' )
+                    {
+                    // InternalFlaDsl.g:1402:6: (enumLiteral_1= 'partial_loss_allowed' )
+                    // InternalFlaDsl.g:1402:8: enumLiteral_1= 'partial_loss_allowed'
+                    {
+                    enumLiteral_1=(Token)match(input,40,FOLLOW_2); 
+
+                            current = grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getDmitigationAccess().getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalFlaDsl.g:1408:6: (enumLiteral_2= 'none' )
+                    {
+                    // InternalFlaDsl.g:1408:6: (enumLiteral_2= 'none' )
+                    // InternalFlaDsl.g:1408:8: enumLiteral_2= 'none'
+                    {
+                    enumLiteral_2=(Token)match(input,28,FOLLOW_2); 
+
+                            current = grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getDmitigationAccess().getNONEEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalFlaDsl.g:1414:6: (enumLiteral_3= 'unspecified' )
+                    {
+                    // InternalFlaDsl.g:1414:6: (enumLiteral_3= 'unspecified' )
+                    // InternalFlaDsl.g:1414:8: enumLiteral_3= 'unspecified'
+                    {
+                    enumLiteral_3=(Token)match(input,29,FOLLOW_2); 
+
+                            current = grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getDmitigationAccess().getUNSPECIFIEDEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDmitigation"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000000802L});
+    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000008010L});
+    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000001000L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000004002L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000007FA0010L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000007E00000L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000044000L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000010002L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000038000000L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000630000000L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000070000000L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x00000000B0000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000130000000L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000001830000000L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000006030000000L});
+    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000018030000000L});
+
+}
\ No newline at end of file
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/serializer/FlaDslSemanticSequencer.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/serializer/FlaDslSemanticSequencer.java
new file mode 100644
index 0000000..c2f23c5
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/serializer/FlaDslSemanticSequencer.java
@@ -0,0 +1,364 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.serializer;
+
+import com.google.inject.Inject;
+import java.util.Set;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.Action;
+import org.eclipse.xtext.Parameter;
+import org.eclipse.xtext.ParserRule;
+import org.eclipse.xtext.serializer.ISerializationContext;
+import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
+import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer;
+import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
+import org.polarsys.chess.xtext.flaDsl.ACIDMitigation;
+import org.polarsys.chess.xtext.flaDsl.ACIDavoidable;
+import org.polarsys.chess.xtext.flaDsl.Behaviour;
+import org.polarsys.chess.xtext.flaDsl.Expression;
+import org.polarsys.chess.xtext.flaDsl.FailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.FlaDslPackage;
+import org.polarsys.chess.xtext.flaDsl.InFailureExpr;
+import org.polarsys.chess.xtext.flaDsl.InputExpression;
+import org.polarsys.chess.xtext.flaDsl.Lhs;
+import org.polarsys.chess.xtext.flaDsl.NoFailureDefinition;
+import org.polarsys.chess.xtext.flaDsl.OutFailureExpr;
+import org.polarsys.chess.xtext.flaDsl.OutputExpression;
+import org.polarsys.chess.xtext.flaDsl.Rhs;
+import org.polarsys.chess.xtext.flaDsl.VariableDefinition;
+import org.polarsys.chess.xtext.flaDsl.WildcardDefinition;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+@SuppressWarnings("all")
+public class FlaDslSemanticSequencer extends AbstractDelegatingSemanticSequencer {
+
+	@Inject
+	private FlaDslGrammarAccess grammarAccess;
+	
+	@Override
+	public void sequence(ISerializationContext context, EObject semanticObject) {
+		EPackage epackage = semanticObject.eClass().getEPackage();
+		ParserRule rule = context.getParserRule();
+		Action action = context.getAssignedAction();
+		Set<Parameter> parameters = context.getEnabledBooleanParameters();
+		if (epackage == FlaDslPackage.eINSTANCE)
+			switch (semanticObject.eClass().getClassifierID()) {
+			case FlaDslPackage.ACID_MITIGATION:
+				sequence_ACIDMitigation(context, (ACIDMitigation) semanticObject); 
+				return; 
+			case FlaDslPackage.ACI_DAVOIDABLE:
+				sequence_ACIDavoidable(context, (ACIDavoidable) semanticObject); 
+				return; 
+			case FlaDslPackage.BEHAVIOUR:
+				sequence_Behaviour(context, (Behaviour) semanticObject); 
+				return; 
+			case FlaDslPackage.EXPRESSION:
+				sequence_Expression(context, (Expression) semanticObject); 
+				return; 
+			case FlaDslPackage.FAILURE_DEFINITION:
+				sequence_FailureDefinition(context, (FailureDefinition) semanticObject); 
+				return; 
+			case FlaDslPackage.IN_FAILURE_EXPR:
+				sequence_InFailureExpr(context, (InFailureExpr) semanticObject); 
+				return; 
+			case FlaDslPackage.INPUT_EXPRESSION:
+				sequence_InputExpression(context, (InputExpression) semanticObject); 
+				return; 
+			case FlaDslPackage.LHS:
+				sequence_Lhs(context, (Lhs) semanticObject); 
+				return; 
+			case FlaDslPackage.NO_FAILURE_DEFINITION:
+				if (rule == grammarAccess.getComplexNofailureDefinitionRule()) {
+					sequence_ComplexNofailureDefinition(context, (NoFailureDefinition) semanticObject); 
+					return; 
+				}
+				else if (rule == grammarAccess.getDefinitionsRule()) {
+					sequence_ComplexNofailureDefinition_NoFailureDefinition(context, (NoFailureDefinition) semanticObject); 
+					return; 
+				}
+				else if (rule == grammarAccess.getNoFailureDefinitionRule()) {
+					sequence_NoFailureDefinition(context, (NoFailureDefinition) semanticObject); 
+					return; 
+				}
+				else break;
+			case FlaDslPackage.OUT_FAILURE_EXPR:
+				sequence_OutFailureExpr(context, (OutFailureExpr) semanticObject); 
+				return; 
+			case FlaDslPackage.OUTPUT_EXPRESSION:
+				sequence_OutputExpression(context, (OutputExpression) semanticObject); 
+				return; 
+			case FlaDslPackage.RHS:
+				sequence_Rhs(context, (Rhs) semanticObject); 
+				return; 
+			case FlaDslPackage.VARIABLE_DEFINITION:
+				sequence_VariableDefinition(context, (VariableDefinition) semanticObject); 
+				return; 
+			case FlaDslPackage.WILDCARD_DEFINITION:
+				sequence_WildcardDefinition(context, (WildcardDefinition) semanticObject); 
+				return; 
+			}
+		if (errorAcceptor != null)
+			errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
+	}
+	
+	/**
+	 * Contexts:
+	 *     ACIDMitigation returns ACIDMitigation
+	 *
+	 * Constraint:
+	 *     (a=Amitigation c=Cmitigation i=Imitigation d=Dmitigation)
+	 */
+	protected void sequence_ACIDMitigation(ISerializationContext context, ACIDMitigation semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__A) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__A));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__C) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__C));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__I) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__I));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__D) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACID_MITIGATION__D));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getACIDMitigationAccess().getAAmitigationEnumRuleCall_0_0(), semanticObject.getA());
+		feeder.accept(grammarAccess.getACIDMitigationAccess().getCCmitigationEnumRuleCall_2_0(), semanticObject.getC());
+		feeder.accept(grammarAccess.getACIDMitigationAccess().getIImitigationEnumRuleCall_4_0(), semanticObject.getI());
+		feeder.accept(grammarAccess.getACIDMitigationAccess().getDDmitigationEnumRuleCall_6_0(), semanticObject.getD());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     ACIDavoidable returns ACIDavoidable
+	 *
+	 * Constraint:
+	 *     (a=Aavoidable c=Cavoidable i=Iavoidable d=Davoidable)
+	 */
+	protected void sequence_ACIDavoidable(ISerializationContext context, ACIDavoidable semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__A) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__A));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__C) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__C));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__I) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__I));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__D) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.ACI_DAVOIDABLE__D));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getACIDavoidableAccess().getAAavoidableEnumRuleCall_0_0(), semanticObject.getA());
+		feeder.accept(grammarAccess.getACIDavoidableAccess().getCCavoidableEnumRuleCall_2_0(), semanticObject.getC());
+		feeder.accept(grammarAccess.getACIDavoidableAccess().getIIavoidableEnumRuleCall_4_0(), semanticObject.getI());
+		feeder.accept(grammarAccess.getACIDavoidableAccess().getDDavoidableEnumRuleCall_6_0(), semanticObject.getD());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Behaviour returns Behaviour
+	 *
+	 * Constraint:
+	 *     rules+=Expression+
+	 */
+	protected void sequence_Behaviour(ISerializationContext context, Behaviour semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     ComplexNofailureDefinition returns NoFailureDefinition
+	 *
+	 * Constraint:
+	 *     acidMitigation=ACIDMitigation
+	 */
+	protected void sequence_ComplexNofailureDefinition(ISerializationContext context, NoFailureDefinition semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.NO_FAILURE_DEFINITION__ACID_MITIGATION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.NO_FAILURE_DEFINITION__ACID_MITIGATION));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getComplexNofailureDefinitionAccess().getAcidMitigationACIDMitigationParserRuleCall_3_0(), semanticObject.getAcidMitigation());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Definitions returns NoFailureDefinition
+	 *
+	 * Constraint:
+	 *     acidMitigation=ACIDMitigation?
+	 */
+	protected void sequence_ComplexNofailureDefinition_NoFailureDefinition(ISerializationContext context, NoFailureDefinition semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Expression returns Expression
+	 *
+	 * Constraint:
+	 *     (lhs=Lhs rhs=Rhs)
+	 */
+	protected void sequence_Expression(ISerializationContext context, Expression semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.EXPRESSION__LHS) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.EXPRESSION__LHS));
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.EXPRESSION__RHS) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.EXPRESSION__RHS));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getExpressionAccess().getLhsLhsParserRuleCall_1_0(), semanticObject.getLhs());
+		feeder.accept(grammarAccess.getExpressionAccess().getRhsRhsParserRuleCall_3_0(), semanticObject.getRhs());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Definitions returns FailureDefinition
+	 *     FailureDefinition returns FailureDefinition
+	 *
+	 * Constraint:
+	 *     (type=ActualFailureType acidAvoidable=ACIDavoidable?)
+	 */
+	protected void sequence_FailureDefinition(ISerializationContext context, FailureDefinition semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     InFailureExpr returns InFailureExpr
+	 *
+	 * Constraint:
+	 *     (
+	 *         failures+=WildcardDefinition | 
+	 *         failures+=NoFailureDefinition | 
+	 *         failures+=FailureDefinition | 
+	 *         (failures+=FailureDefinition failures+=FailureDefinition+) | 
+	 *         failures+=VariableDefinition
+	 *     )
+	 */
+	protected void sequence_InFailureExpr(ISerializationContext context, InFailureExpr semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     InputExpression returns InputExpression
+	 *
+	 * Constraint:
+	 *     (ref=[Port|ID]? failureExpr=InFailureExpr)
+	 */
+	protected void sequence_InputExpression(ISerializationContext context, InputExpression semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Lhs returns Lhs
+	 *
+	 * Constraint:
+	 *     (failures+=InputExpression failures+=InputExpression*)
+	 */
+	protected void sequence_Lhs(ISerializationContext context, Lhs semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     NoFailureDefinition returns NoFailureDefinition
+	 *
+	 * Constraint:
+	 *     {NoFailureDefinition}
+	 */
+	protected void sequence_NoFailureDefinition(ISerializationContext context, NoFailureDefinition semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     OutFailureExpr returns OutFailureExpr
+	 *
+	 * Constraint:
+	 *     (
+	 *         failures+=NoFailureDefinition | 
+	 *         failures+=ComplexNofailureDefinition | 
+	 *         failures+=FailureDefinition | 
+	 *         (failures+=FailureDefinition failures+=FailureDefinition+) | 
+	 *         failures+=VariableDefinition
+	 *     )
+	 */
+	protected void sequence_OutFailureExpr(ISerializationContext context, OutFailureExpr semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     OutputExpression returns OutputExpression
+	 *
+	 * Constraint:
+	 *     (ref=[Port|ID]? failureExpr=OutFailureExpr)
+	 */
+	protected void sequence_OutputExpression(ISerializationContext context, OutputExpression semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Rhs returns Rhs
+	 *
+	 * Constraint:
+	 *     (failures+=OutputExpression failures+=OutputExpression*)
+	 */
+	protected void sequence_Rhs(ISerializationContext context, Rhs semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Definitions returns VariableDefinition
+	 *     VariableDefinition returns VariableDefinition
+	 *
+	 * Constraint:
+	 *     variableName=ID
+	 */
+	protected void sequence_VariableDefinition(ISerializationContext context, VariableDefinition semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, FlaDslPackage.Literals.VARIABLE_DEFINITION__VARIABLE_NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, FlaDslPackage.Literals.VARIABLE_DEFINITION__VARIABLE_NAME));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getVariableDefinitionAccess().getVariableNameIDTerminalRuleCall_1_0(), semanticObject.getVariableName());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     Definitions returns WildcardDefinition
+	 *     WildcardDefinition returns WildcardDefinition
+	 *
+	 * Constraint:
+	 *     {WildcardDefinition}
+	 */
+	protected void sequence_WildcardDefinition(ISerializationContext context, WildcardDefinition semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/serializer/FlaDslSyntacticSequencer.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/serializer/FlaDslSyntacticSequencer.java
new file mode 100644
index 0000000..59f2069
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/serializer/FlaDslSyntacticSequencer.java
@@ -0,0 +1,43 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.serializer;
+
+import com.google.inject.Inject;
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.IGrammarAccess;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.nodemodel.INode;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
+import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
+import org.polarsys.chess.xtext.services.FlaDslGrammarAccess;
+
+@SuppressWarnings("all")
+public class FlaDslSyntacticSequencer extends AbstractSyntacticSequencer {
+
+	protected FlaDslGrammarAccess grammarAccess;
+	
+	@Inject
+	protected void init(IGrammarAccess access) {
+		grammarAccess = (FlaDslGrammarAccess) access;
+	}
+	
+	@Override
+	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
+		return "";
+	}
+	
+	
+	@Override
+	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
+		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
+		List<INode> transitionNodes = collectNodes(fromNode, toNode);
+		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
+			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
+			acceptNodes(getLastNavigableState(), syntaxNodes);
+		}
+	}
+
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/services/FlaDslGrammarAccess.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/services/FlaDslGrammarAccess.java
new file mode 100644
index 0000000..43f02c0
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/services/FlaDslGrammarAccess.java
@@ -0,0 +1,1655 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.services;
+
+import com.google.inject.Singleton;
+import com.google.inject.Inject;
+
+import java.util.List;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.service.GrammarProvider;
+import org.eclipse.xtext.service.AbstractElementFinder.*;
+
+import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
+
+@Singleton
+public class FlaDslGrammarAccess extends AbstractGrammarElementFinder {
+	
+	
+	public class BehaviourElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Behaviour");
+		private final Assignment cRulesAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cRulesExpressionParserRuleCall_0 = (RuleCall)cRulesAssignment.eContents().get(0);
+		
+		///*
+		// * FLA Grammar
+		// */ Behaviour:
+		//	rules+=Expression+;
+		@Override public ParserRule getRule() { return rule; }
+
+		//rules+=Expression+
+		public Assignment getRulesAssignment() { return cRulesAssignment; }
+
+		//Expression
+		public RuleCall getRulesExpressionParserRuleCall_0() { return cRulesExpressionParserRuleCall_0; }
+	}
+
+	public class ExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Expression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cFLAKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cLhsAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cLhsLhsParserRuleCall_1_0 = (RuleCall)cLhsAssignment_1.eContents().get(0);
+		private final Keyword cHyphenMinusGreaterThanSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cRhsAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cRhsRhsParserRuleCall_3_0 = (RuleCall)cRhsAssignment_3.eContents().get(0);
+		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//Expression:
+		//	'FLA:' lhs=Lhs '->' rhs=Rhs ';';
+		@Override public ParserRule getRule() { return rule; }
+
+		//'FLA:' lhs=Lhs '->' rhs=Rhs ';'
+		public Group getGroup() { return cGroup; }
+
+		//'FLA:'
+		public Keyword getFLAKeyword_0() { return cFLAKeyword_0; }
+
+		//lhs=Lhs
+		public Assignment getLhsAssignment_1() { return cLhsAssignment_1; }
+
+		//Lhs
+		public RuleCall getLhsLhsParserRuleCall_1_0() { return cLhsLhsParserRuleCall_1_0; }
+
+		//'->'
+		public Keyword getHyphenMinusGreaterThanSignKeyword_2() { return cHyphenMinusGreaterThanSignKeyword_2; }
+
+		//rhs=Rhs
+		public Assignment getRhsAssignment_3() { return cRhsAssignment_3; }
+
+		//Rhs
+		public RuleCall getRhsRhsParserRuleCall_3_0() { return cRhsRhsParserRuleCall_3_0; }
+
+		//';'
+		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
+	}
+
+	public class LhsElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Lhs");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cFailuresAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cFailuresInputExpressionParserRuleCall_0_0 = (RuleCall)cFailuresAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cFailuresAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cFailuresInputExpressionParserRuleCall_1_1_0 = (RuleCall)cFailuresAssignment_1_1.eContents().get(0);
+		
+		//Lhs:
+		//	failures+=InputExpression (',' failures+=InputExpression)*;
+		@Override public ParserRule getRule() { return rule; }
+
+		//failures+=InputExpression (',' failures+=InputExpression)*
+		public Group getGroup() { return cGroup; }
+
+		//failures+=InputExpression
+		public Assignment getFailuresAssignment_0() { return cFailuresAssignment_0; }
+
+		//InputExpression
+		public RuleCall getFailuresInputExpressionParserRuleCall_0_0() { return cFailuresInputExpressionParserRuleCall_0_0; }
+
+		//(',' failures+=InputExpression)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//','
+		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
+
+		//failures+=InputExpression
+		public Assignment getFailuresAssignment_1_1() { return cFailuresAssignment_1_1; }
+
+		//InputExpression
+		public RuleCall getFailuresInputExpressionParserRuleCall_1_1_0() { return cFailuresInputExpressionParserRuleCall_1_1_0; }
+	}
+
+	public class RhsElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Rhs");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cFailuresAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cFailuresOutputExpressionParserRuleCall_0_0 = (RuleCall)cFailuresAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cFailuresAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cFailuresOutputExpressionParserRuleCall_1_1_0 = (RuleCall)cFailuresAssignment_1_1.eContents().get(0);
+		
+		//Rhs:
+		//	failures+=OutputExpression (',' failures+=OutputExpression)*;
+		@Override public ParserRule getRule() { return rule; }
+
+		//failures+=OutputExpression (',' failures+=OutputExpression)*
+		public Group getGroup() { return cGroup; }
+
+		//failures+=OutputExpression
+		public Assignment getFailuresAssignment_0() { return cFailuresAssignment_0; }
+
+		//OutputExpression
+		public RuleCall getFailuresOutputExpressionParserRuleCall_0_0() { return cFailuresOutputExpressionParserRuleCall_0_0; }
+
+		//(',' failures+=OutputExpression)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//','
+		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
+
+		//failures+=OutputExpression
+		public Assignment getFailuresAssignment_1_1() { return cFailuresAssignment_1_1; }
+
+		//OutputExpression
+		public RuleCall getFailuresOutputExpressionParserRuleCall_1_1_0() { return cFailuresOutputExpressionParserRuleCall_1_1_0; }
+	}
+
+	public class InputExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.InputExpression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Assignment cRefAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
+		private final CrossReference cRefPortCrossReference_0_0_0 = (CrossReference)cRefAssignment_0_0.eContents().get(0);
+		private final RuleCall cRefPortIDTerminalRuleCall_0_0_0_1 = (RuleCall)cRefPortCrossReference_0_0_0.eContents().get(1);
+		private final Keyword cUndefinedKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
+		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cFailureExprAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cFailureExprInFailureExprParserRuleCall_2_0 = (RuleCall)cFailureExprAssignment_2.eContents().get(0);
+		
+		//InputExpression:
+		//	(ref=[uml::Port] | "undefined") '.' failureExpr=InFailureExpr;
+		@Override public ParserRule getRule() { return rule; }
+
+		//(ref=[uml::Port] | "undefined") '.' failureExpr=InFailureExpr
+		public Group getGroup() { return cGroup; }
+
+		//ref=[uml::Port] | "undefined"
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//ref=[uml::Port]
+		public Assignment getRefAssignment_0_0() { return cRefAssignment_0_0; }
+
+		//[uml::Port]
+		public CrossReference getRefPortCrossReference_0_0_0() { return cRefPortCrossReference_0_0_0; }
+
+		//ID
+		public RuleCall getRefPortIDTerminalRuleCall_0_0_0_1() { return cRefPortIDTerminalRuleCall_0_0_0_1; }
+
+		//"undefined"
+		public Keyword getUndefinedKeyword_0_1() { return cUndefinedKeyword_0_1; }
+
+		//'.'
+		public Keyword getFullStopKeyword_1() { return cFullStopKeyword_1; }
+
+		//failureExpr=InFailureExpr
+		public Assignment getFailureExprAssignment_2() { return cFailureExprAssignment_2; }
+
+		//InFailureExpr
+		public RuleCall getFailureExprInFailureExprParserRuleCall_2_0() { return cFailureExprInFailureExprParserRuleCall_2_0; }
+	}
+
+	public class OutputExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.OutputExpression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Assignment cRefAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
+		private final CrossReference cRefPortCrossReference_0_0_0 = (CrossReference)cRefAssignment_0_0.eContents().get(0);
+		private final RuleCall cRefPortIDTerminalRuleCall_0_0_0_1 = (RuleCall)cRefPortCrossReference_0_0_0.eContents().get(1);
+		private final Keyword cUndefinedKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
+		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cFailureExprAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cFailureExprOutFailureExprParserRuleCall_2_0 = (RuleCall)cFailureExprAssignment_2.eContents().get(0);
+		
+		//OutputExpression:
+		//	(ref=[uml::Port] | "undefined") '.' failureExpr=OutFailureExpr;
+		@Override public ParserRule getRule() { return rule; }
+
+		//(ref=[uml::Port] | "undefined") '.' failureExpr=OutFailureExpr
+		public Group getGroup() { return cGroup; }
+
+		//ref=[uml::Port] | "undefined"
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//ref=[uml::Port]
+		public Assignment getRefAssignment_0_0() { return cRefAssignment_0_0; }
+
+		//[uml::Port]
+		public CrossReference getRefPortCrossReference_0_0_0() { return cRefPortCrossReference_0_0_0; }
+
+		//ID
+		public RuleCall getRefPortIDTerminalRuleCall_0_0_0_1() { return cRefPortIDTerminalRuleCall_0_0_0_1; }
+
+		//"undefined"
+		public Keyword getUndefinedKeyword_0_1() { return cUndefinedKeyword_0_1; }
+
+		//'.'
+		public Keyword getFullStopKeyword_1() { return cFullStopKeyword_1; }
+
+		//failureExpr=OutFailureExpr
+		public Assignment getFailureExprAssignment_2() { return cFailureExprAssignment_2; }
+
+		//OutFailureExpr
+		public RuleCall getFailureExprOutFailureExprParserRuleCall_2_0() { return cFailureExprOutFailureExprParserRuleCall_2_0; }
+	}
+
+	public class InFailureExprElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.InFailureExpr");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cFailuresAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cFailuresWildcardDefinitionParserRuleCall_0_0 = (RuleCall)cFailuresAssignment_0.eContents().get(0);
+		private final Assignment cFailuresAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cFailuresNoFailureDefinitionParserRuleCall_1_0 = (RuleCall)cFailuresAssignment_1.eContents().get(0);
+		private final Assignment cFailuresAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
+		private final RuleCall cFailuresFailureDefinitionParserRuleCall_2_0 = (RuleCall)cFailuresAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
+		private final Keyword cLeftCurlyBracketKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cFailuresAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cFailuresFailureDefinitionParserRuleCall_3_1_0 = (RuleCall)cFailuresAssignment_3_1.eContents().get(0);
+		private final Group cGroup_3_2 = (Group)cGroup_3.eContents().get(2);
+		private final Keyword cCommaKeyword_3_2_0 = (Keyword)cGroup_3_2.eContents().get(0);
+		private final Assignment cFailuresAssignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
+		private final RuleCall cFailuresFailureDefinitionParserRuleCall_3_2_1_0 = (RuleCall)cFailuresAssignment_3_2_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
+		private final Assignment cFailuresAssignment_4 = (Assignment)cAlternatives.eContents().get(4);
+		private final RuleCall cFailuresVariableDefinitionParserRuleCall_4_0 = (RuleCall)cFailuresAssignment_4.eContents().get(0);
+		
+		//InFailureExpr:
+		//	failures+=WildcardDefinition | failures+=NoFailureDefinition | failures+=FailureDefinition |
+		//	'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | failures+=VariableDefinition;
+		@Override public ParserRule getRule() { return rule; }
+
+		//failures+=WildcardDefinition | failures+=NoFailureDefinition | failures+=FailureDefinition | '{'
+		//failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | failures+=VariableDefinition
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//failures+=WildcardDefinition
+		public Assignment getFailuresAssignment_0() { return cFailuresAssignment_0; }
+
+		//WildcardDefinition
+		public RuleCall getFailuresWildcardDefinitionParserRuleCall_0_0() { return cFailuresWildcardDefinitionParserRuleCall_0_0; }
+
+		//failures+=NoFailureDefinition
+		public Assignment getFailuresAssignment_1() { return cFailuresAssignment_1; }
+
+		//NoFailureDefinition
+		public RuleCall getFailuresNoFailureDefinitionParserRuleCall_1_0() { return cFailuresNoFailureDefinitionParserRuleCall_1_0; }
+
+		//failures+=FailureDefinition
+		public Assignment getFailuresAssignment_2() { return cFailuresAssignment_2; }
+
+		//FailureDefinition
+		public RuleCall getFailuresFailureDefinitionParserRuleCall_2_0() { return cFailuresFailureDefinitionParserRuleCall_2_0; }
+
+		//'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}'
+		public Group getGroup_3() { return cGroup_3; }
+
+		//'{'
+		public Keyword getLeftCurlyBracketKeyword_3_0() { return cLeftCurlyBracketKeyword_3_0; }
+
+		//failures+=FailureDefinition
+		public Assignment getFailuresAssignment_3_1() { return cFailuresAssignment_3_1; }
+
+		//FailureDefinition
+		public RuleCall getFailuresFailureDefinitionParserRuleCall_3_1_0() { return cFailuresFailureDefinitionParserRuleCall_3_1_0; }
+
+		//(',' failures+=FailureDefinition)+
+		public Group getGroup_3_2() { return cGroup_3_2; }
+
+		//','
+		public Keyword getCommaKeyword_3_2_0() { return cCommaKeyword_3_2_0; }
+
+		//failures+=FailureDefinition
+		public Assignment getFailuresAssignment_3_2_1() { return cFailuresAssignment_3_2_1; }
+
+		//FailureDefinition
+		public RuleCall getFailuresFailureDefinitionParserRuleCall_3_2_1_0() { return cFailuresFailureDefinitionParserRuleCall_3_2_1_0; }
+
+		//'}'
+		public Keyword getRightCurlyBracketKeyword_3_3() { return cRightCurlyBracketKeyword_3_3; }
+
+		//failures+=VariableDefinition
+		public Assignment getFailuresAssignment_4() { return cFailuresAssignment_4; }
+
+		//VariableDefinition
+		public RuleCall getFailuresVariableDefinitionParserRuleCall_4_0() { return cFailuresVariableDefinitionParserRuleCall_4_0; }
+	}
+
+	public class OutFailureExprElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.OutFailureExpr");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cFailuresAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cFailuresNoFailureDefinitionParserRuleCall_0_0 = (RuleCall)cFailuresAssignment_0.eContents().get(0);
+		private final Assignment cFailuresAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cFailuresComplexNofailureDefinitionParserRuleCall_1_0 = (RuleCall)cFailuresAssignment_1.eContents().get(0);
+		private final Assignment cFailuresAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
+		private final RuleCall cFailuresFailureDefinitionParserRuleCall_2_0 = (RuleCall)cFailuresAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
+		private final Keyword cLeftCurlyBracketKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cFailuresAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cFailuresFailureDefinitionParserRuleCall_3_1_0 = (RuleCall)cFailuresAssignment_3_1.eContents().get(0);
+		private final Group cGroup_3_2 = (Group)cGroup_3.eContents().get(2);
+		private final Keyword cCommaKeyword_3_2_0 = (Keyword)cGroup_3_2.eContents().get(0);
+		private final Assignment cFailuresAssignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
+		private final RuleCall cFailuresFailureDefinitionParserRuleCall_3_2_1_0 = (RuleCall)cFailuresAssignment_3_2_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
+		private final Assignment cFailuresAssignment_4 = (Assignment)cAlternatives.eContents().get(4);
+		private final RuleCall cFailuresVariableDefinitionParserRuleCall_4_0 = (RuleCall)cFailuresAssignment_4.eContents().get(0);
+		
+		//OutFailureExpr:
+		//	failures+=NoFailureDefinition | failures+=ComplexNofailureDefinition | failures+=FailureDefinition |
+		//	'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | failures+=VariableDefinition;
+		@Override public ParserRule getRule() { return rule; }
+
+		//failures+=NoFailureDefinition | failures+=ComplexNofailureDefinition | failures+=FailureDefinition | '{'
+		//failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | failures+=VariableDefinition
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//failures+=NoFailureDefinition
+		public Assignment getFailuresAssignment_0() { return cFailuresAssignment_0; }
+
+		//NoFailureDefinition
+		public RuleCall getFailuresNoFailureDefinitionParserRuleCall_0_0() { return cFailuresNoFailureDefinitionParserRuleCall_0_0; }
+
+		//failures+=ComplexNofailureDefinition
+		public Assignment getFailuresAssignment_1() { return cFailuresAssignment_1; }
+
+		//ComplexNofailureDefinition
+		public RuleCall getFailuresComplexNofailureDefinitionParserRuleCall_1_0() { return cFailuresComplexNofailureDefinitionParserRuleCall_1_0; }
+
+		//failures+=FailureDefinition
+		public Assignment getFailuresAssignment_2() { return cFailuresAssignment_2; }
+
+		//FailureDefinition
+		public RuleCall getFailuresFailureDefinitionParserRuleCall_2_0() { return cFailuresFailureDefinitionParserRuleCall_2_0; }
+
+		//'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}'
+		public Group getGroup_3() { return cGroup_3; }
+
+		//'{'
+		public Keyword getLeftCurlyBracketKeyword_3_0() { return cLeftCurlyBracketKeyword_3_0; }
+
+		//failures+=FailureDefinition
+		public Assignment getFailuresAssignment_3_1() { return cFailuresAssignment_3_1; }
+
+		//FailureDefinition
+		public RuleCall getFailuresFailureDefinitionParserRuleCall_3_1_0() { return cFailuresFailureDefinitionParserRuleCall_3_1_0; }
+
+		//(',' failures+=FailureDefinition)+
+		public Group getGroup_3_2() { return cGroup_3_2; }
+
+		//','
+		public Keyword getCommaKeyword_3_2_0() { return cCommaKeyword_3_2_0; }
+
+		//failures+=FailureDefinition
+		public Assignment getFailuresAssignment_3_2_1() { return cFailuresAssignment_3_2_1; }
+
+		//FailureDefinition
+		public RuleCall getFailuresFailureDefinitionParserRuleCall_3_2_1_0() { return cFailuresFailureDefinitionParserRuleCall_3_2_1_0; }
+
+		//'}'
+		public Keyword getRightCurlyBracketKeyword_3_3() { return cRightCurlyBracketKeyword_3_3; }
+
+		//failures+=VariableDefinition
+		public Assignment getFailuresAssignment_4() { return cFailuresAssignment_4; }
+
+		//VariableDefinition
+		public RuleCall getFailuresVariableDefinitionParserRuleCall_4_0() { return cFailuresVariableDefinitionParserRuleCall_4_0; }
+	}
+
+	public class DefinitionsElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Definitions");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cFailureDefinitionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cNoFailureDefinitionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cComplexNofailureDefinitionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cWildcardDefinitionParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
+		private final RuleCall cVariableDefinitionParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
+		
+		//Definitions:
+		//	FailureDefinition | NoFailureDefinition | ComplexNofailureDefinition | WildcardDefinition | VariableDefinition;
+		@Override public ParserRule getRule() { return rule; }
+
+		//FailureDefinition | NoFailureDefinition | ComplexNofailureDefinition | WildcardDefinition | VariableDefinition
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//FailureDefinition
+		public RuleCall getFailureDefinitionParserRuleCall_0() { return cFailureDefinitionParserRuleCall_0; }
+
+		//NoFailureDefinition
+		public RuleCall getNoFailureDefinitionParserRuleCall_1() { return cNoFailureDefinitionParserRuleCall_1; }
+
+		//ComplexNofailureDefinition
+		public RuleCall getComplexNofailureDefinitionParserRuleCall_2() { return cComplexNofailureDefinitionParserRuleCall_2; }
+
+		//WildcardDefinition
+		public RuleCall getWildcardDefinitionParserRuleCall_3() { return cWildcardDefinitionParserRuleCall_3; }
+
+		//VariableDefinition
+		public RuleCall getVariableDefinitionParserRuleCall_4() { return cVariableDefinitionParserRuleCall_4; }
+	}
+
+	public class FailureDefinitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.FailureDefinition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cFailureDefinitionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cTypeActualFailureTypeEnumRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cFullStopKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Assignment cAcidAvoidableAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
+		private final RuleCall cAcidAvoidableACIDavoidableParserRuleCall_2_1_0 = (RuleCall)cAcidAvoidableAssignment_2_1.eContents().get(0);
+		
+		//FailureDefinition:
+		//	{FailureDefinition} type=ActualFailureType ('.' acidAvoidable=ACIDavoidable)?;
+		@Override public ParserRule getRule() { return rule; }
+
+		//{FailureDefinition} type=ActualFailureType ('.' acidAvoidable=ACIDavoidable)?
+		public Group getGroup() { return cGroup; }
+
+		//{FailureDefinition}
+		public Action getFailureDefinitionAction_0() { return cFailureDefinitionAction_0; }
+
+		//type=ActualFailureType
+		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
+
+		//ActualFailureType
+		public RuleCall getTypeActualFailureTypeEnumRuleCall_1_0() { return cTypeActualFailureTypeEnumRuleCall_1_0; }
+
+		//('.' acidAvoidable=ACIDavoidable)?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//'.'
+		public Keyword getFullStopKeyword_2_0() { return cFullStopKeyword_2_0; }
+
+		//acidAvoidable=ACIDavoidable
+		public Assignment getAcidAvoidableAssignment_2_1() { return cAcidAvoidableAssignment_2_1; }
+
+		//ACIDavoidable
+		public RuleCall getAcidAvoidableACIDavoidableParserRuleCall_2_1_0() { return cAcidAvoidableACIDavoidableParserRuleCall_2_1_0; }
+	}
+
+	public class NoFailureDefinitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.NoFailureDefinition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cNoFailureDefinitionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cNoFailureKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		
+		//NoFailureDefinition:
+		//	{NoFailureDefinition} 'noFailure';
+		@Override public ParserRule getRule() { return rule; }
+
+		//{NoFailureDefinition} 'noFailure'
+		public Group getGroup() { return cGroup; }
+
+		//{NoFailureDefinition}
+		public Action getNoFailureDefinitionAction_0() { return cNoFailureDefinitionAction_0; }
+
+		//'noFailure'
+		public Keyword getNoFailureKeyword_1() { return cNoFailureKeyword_1; }
+	}
+
+	public class ComplexNofailureDefinitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.ComplexNofailureDefinition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cNoFailureDefinitionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cNoFailureKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Keyword cFullStopKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cAcidMitigationAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cAcidMitigationACIDMitigationParserRuleCall_3_0 = (RuleCall)cAcidMitigationAssignment_3.eContents().get(0);
+		
+		//ComplexNofailureDefinition:
+		//	{NoFailureDefinition} 'noFailure' '.' acidMitigation=ACIDMitigation;
+		@Override public ParserRule getRule() { return rule; }
+
+		//{NoFailureDefinition} 'noFailure' '.' acidMitigation=ACIDMitigation
+		public Group getGroup() { return cGroup; }
+
+		//{NoFailureDefinition}
+		public Action getNoFailureDefinitionAction_0() { return cNoFailureDefinitionAction_0; }
+
+		//'noFailure'
+		public Keyword getNoFailureKeyword_1() { return cNoFailureKeyword_1; }
+
+		//'.'
+		public Keyword getFullStopKeyword_2() { return cFullStopKeyword_2; }
+
+		//acidMitigation=ACIDMitigation
+		public Assignment getAcidMitigationAssignment_3() { return cAcidMitigationAssignment_3; }
+
+		//ACIDMitigation
+		public RuleCall getAcidMitigationACIDMitigationParserRuleCall_3_0() { return cAcidMitigationACIDMitigationParserRuleCall_3_0; }
+	}
+
+	public class WildcardDefinitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.WildcardDefinition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cWildcardDefinitionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cWildcardKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		
+		//WildcardDefinition:
+		//	{WildcardDefinition} 'wildcard';
+		@Override public ParserRule getRule() { return rule; }
+
+		//{WildcardDefinition} 'wildcard'
+		public Group getGroup() { return cGroup; }
+
+		//{WildcardDefinition}
+		public Action getWildcardDefinitionAction_0() { return cWildcardDefinitionAction_0; }
+
+		//'wildcard'
+		public Keyword getWildcardKeyword_1() { return cWildcardKeyword_1; }
+	}
+
+	public class VariableDefinitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.VariableDefinition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cVariableDefinitionAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cVariableNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cVariableNameIDTerminalRuleCall_1_0 = (RuleCall)cVariableNameAssignment_1.eContents().get(0);
+		
+		//VariableDefinition:
+		//	{VariableDefinition} variableName=ID;
+		@Override public ParserRule getRule() { return rule; }
+
+		//{VariableDefinition} variableName=ID
+		public Group getGroup() { return cGroup; }
+
+		//{VariableDefinition}
+		public Action getVariableDefinitionAction_0() { return cVariableDefinitionAction_0; }
+
+		//variableName=ID
+		public Assignment getVariableNameAssignment_1() { return cVariableNameAssignment_1; }
+
+		//ID
+		public RuleCall getVariableNameIDTerminalRuleCall_1_0() { return cVariableNameIDTerminalRuleCall_1_0; }
+	}
+
+	public class ACIDavoidableElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.ACIDavoidable");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cAAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cAAavoidableEnumRuleCall_0_0 = (RuleCall)cAAssignment_0.eContents().get(0);
+		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cCAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cCCavoidableEnumRuleCall_2_0 = (RuleCall)cCAssignment_2.eContents().get(0);
+		private final Keyword cFullStopKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cIAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cIIavoidableEnumRuleCall_4_0 = (RuleCall)cIAssignment_4.eContents().get(0);
+		private final Keyword cFullStopKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cDAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cDDavoidableEnumRuleCall_6_0 = (RuleCall)cDAssignment_6.eContents().get(0);
+		
+		//ACIDavoidable:
+		//	a=Aavoidable '.' c=Cavoidable '.' i=Iavoidable '.' d=Davoidable;
+		@Override public ParserRule getRule() { return rule; }
+
+		//a=Aavoidable '.' c=Cavoidable '.' i=Iavoidable '.' d=Davoidable
+		public Group getGroup() { return cGroup; }
+
+		//a=Aavoidable
+		public Assignment getAAssignment_0() { return cAAssignment_0; }
+
+		//Aavoidable
+		public RuleCall getAAavoidableEnumRuleCall_0_0() { return cAAavoidableEnumRuleCall_0_0; }
+
+		//'.'
+		public Keyword getFullStopKeyword_1() { return cFullStopKeyword_1; }
+
+		//c=Cavoidable
+		public Assignment getCAssignment_2() { return cCAssignment_2; }
+
+		//Cavoidable
+		public RuleCall getCCavoidableEnumRuleCall_2_0() { return cCCavoidableEnumRuleCall_2_0; }
+
+		//'.'
+		public Keyword getFullStopKeyword_3() { return cFullStopKeyword_3; }
+
+		//i=Iavoidable
+		public Assignment getIAssignment_4() { return cIAssignment_4; }
+
+		//Iavoidable
+		public RuleCall getIIavoidableEnumRuleCall_4_0() { return cIIavoidableEnumRuleCall_4_0; }
+
+		//'.'
+		public Keyword getFullStopKeyword_5() { return cFullStopKeyword_5; }
+
+		//d=Davoidable
+		public Assignment getDAssignment_6() { return cDAssignment_6; }
+
+		//Davoidable
+		public RuleCall getDDavoidableEnumRuleCall_6_0() { return cDDavoidableEnumRuleCall_6_0; }
+	}
+
+	public class ACIDMitigationElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.ACIDMitigation");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cAAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cAAmitigationEnumRuleCall_0_0 = (RuleCall)cAAssignment_0.eContents().get(0);
+		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cCAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cCCmitigationEnumRuleCall_2_0 = (RuleCall)cCAssignment_2.eContents().get(0);
+		private final Keyword cFullStopKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cIAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cIImitigationEnumRuleCall_4_0 = (RuleCall)cIAssignment_4.eContents().get(0);
+		private final Keyword cFullStopKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cDAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cDDmitigationEnumRuleCall_6_0 = (RuleCall)cDAssignment_6.eContents().get(0);
+		
+		//ACIDMitigation:
+		//	a=Amitigation '.' c=Cmitigation '.' i=Imitigation '.' d=Dmitigation;
+		@Override public ParserRule getRule() { return rule; }
+
+		//a=Amitigation '.' c=Cmitigation '.' i=Imitigation '.' d=Dmitigation
+		public Group getGroup() { return cGroup; }
+
+		//a=Amitigation
+		public Assignment getAAssignment_0() { return cAAssignment_0; }
+
+		//Amitigation
+		public RuleCall getAAmitigationEnumRuleCall_0_0() { return cAAmitigationEnumRuleCall_0_0; }
+
+		//'.'
+		public Keyword getFullStopKeyword_1() { return cFullStopKeyword_1; }
+
+		//c=Cmitigation
+		public Assignment getCAssignment_2() { return cCAssignment_2; }
+
+		//Cmitigation
+		public RuleCall getCCmitigationEnumRuleCall_2_0() { return cCCmitigationEnumRuleCall_2_0; }
+
+		//'.'
+		public Keyword getFullStopKeyword_3() { return cFullStopKeyword_3; }
+
+		//i=Imitigation
+		public Assignment getIAssignment_4() { return cIAssignment_4; }
+
+		//Imitigation
+		public RuleCall getIImitigationEnumRuleCall_4_0() { return cIImitigationEnumRuleCall_4_0; }
+
+		//'.'
+		public Keyword getFullStopKeyword_5() { return cFullStopKeyword_5; }
+
+		//d=Dmitigation
+		public Assignment getDAssignment_6() { return cDAssignment_6; }
+
+		//Dmitigation
+		public RuleCall getDDmitigationEnumRuleCall_6_0() { return cDDmitigationEnumRuleCall_6_0; }
+	}
+
+	public class FQNElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.FQN");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cColonColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cIDTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		///*
+		// * Additional rule to refer UML elements in a Model
+		// */ FQN:
+		//	ID ('::' ID)*;
+		@Override public ParserRule getRule() { return rule; }
+
+		//ID ('::' ID)*
+		public Group getGroup() { return cGroup; }
+
+		//ID
+		public RuleCall getIDTerminalRuleCall_0() { return cIDTerminalRuleCall_0; }
+
+		//('::' ID)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//'::'
+		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }
+
+		//ID
+		public RuleCall getIDTerminalRuleCall_1_1() { return cIDTerminalRuleCall_1_1; }
+	}
+	
+	
+	public class FailureTypeElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.FailureType");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cNO_FAILUREEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cNO_FAILURENoFailureKeyword_0_0 = (Keyword)cNO_FAILUREEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cEARLYEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cEARLYEarlyKeyword_1_0 = (Keyword)cEARLYEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cLATEEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cLATELateKeyword_2_0 = (Keyword)cLATEEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cCOMMISSIONEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cCOMMISSIONCommissionKeyword_3_0 = (Keyword)cCOMMISSIONEnumLiteralDeclaration_3.eContents().get(0);
+		private final EnumLiteralDeclaration cOMISSIONEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
+		private final Keyword cOMISSIONOmissionKeyword_4_0 = (Keyword)cOMISSIONEnumLiteralDeclaration_4.eContents().get(0);
+		private final EnumLiteralDeclaration cVALUE_SUBTLEEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
+		private final Keyword cVALUE_SUBTLEValueSubtleKeyword_5_0 = (Keyword)cVALUE_SUBTLEEnumLiteralDeclaration_5.eContents().get(0);
+		private final EnumLiteralDeclaration cVALUE_COARSEEnumLiteralDeclaration_6 = (EnumLiteralDeclaration)cAlternatives.eContents().get(6);
+		private final Keyword cVALUE_COARSEValueCoarseKeyword_6_0 = (Keyword)cVALUE_COARSEEnumLiteralDeclaration_6.eContents().get(0);
+		private final EnumLiteralDeclaration cWILDCARDEnumLiteralDeclaration_7 = (EnumLiteralDeclaration)cAlternatives.eContents().get(7);
+		private final Keyword cWILDCARDWildcardKeyword_7_0 = (Keyword)cWILDCARDEnumLiteralDeclaration_7.eContents().get(0);
+		private final EnumLiteralDeclaration cVARIABLEEnumLiteralDeclaration_8 = (EnumLiteralDeclaration)cAlternatives.eContents().get(8);
+		private final Keyword cVARIABLEVariableKeyword_8_0 = (Keyword)cVARIABLEEnumLiteralDeclaration_8.eContents().get(0);
+		
+		//enum FailureType:
+		//	NO_FAILURE='noFailure' | EARLY='early' | LATE='late' | COMMISSION='commission' | OMISSION='omission' |
+		//	VALUE_SUBTLE='valueSubtle' | VALUE_COARSE='valueCoarse' | WILDCARD="wildcard" | VARIABLE='variable';
+		public EnumRule getRule() { return rule; }
+
+		//NO_FAILURE='noFailure' | EARLY='early' | LATE='late' | COMMISSION='commission' | OMISSION='omission' |
+		//VALUE_SUBTLE='valueSubtle' | VALUE_COARSE='valueCoarse' | WILDCARD="wildcard" | VARIABLE='variable'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//NO_FAILURE='noFailure'
+		public EnumLiteralDeclaration getNO_FAILUREEnumLiteralDeclaration_0() { return cNO_FAILUREEnumLiteralDeclaration_0; }
+
+		//'noFailure'
+		public Keyword getNO_FAILURENoFailureKeyword_0_0() { return cNO_FAILURENoFailureKeyword_0_0; }
+
+		//EARLY='early'
+		public EnumLiteralDeclaration getEARLYEnumLiteralDeclaration_1() { return cEARLYEnumLiteralDeclaration_1; }
+
+		//'early'
+		public Keyword getEARLYEarlyKeyword_1_0() { return cEARLYEarlyKeyword_1_0; }
+
+		//LATE='late'
+		public EnumLiteralDeclaration getLATEEnumLiteralDeclaration_2() { return cLATEEnumLiteralDeclaration_2; }
+
+		//'late'
+		public Keyword getLATELateKeyword_2_0() { return cLATELateKeyword_2_0; }
+
+		//COMMISSION='commission'
+		public EnumLiteralDeclaration getCOMMISSIONEnumLiteralDeclaration_3() { return cCOMMISSIONEnumLiteralDeclaration_3; }
+
+		//'commission'
+		public Keyword getCOMMISSIONCommissionKeyword_3_0() { return cCOMMISSIONCommissionKeyword_3_0; }
+
+		//OMISSION='omission'
+		public EnumLiteralDeclaration getOMISSIONEnumLiteralDeclaration_4() { return cOMISSIONEnumLiteralDeclaration_4; }
+
+		//'omission'
+		public Keyword getOMISSIONOmissionKeyword_4_0() { return cOMISSIONOmissionKeyword_4_0; }
+
+		//VALUE_SUBTLE='valueSubtle'
+		public EnumLiteralDeclaration getVALUE_SUBTLEEnumLiteralDeclaration_5() { return cVALUE_SUBTLEEnumLiteralDeclaration_5; }
+
+		//'valueSubtle'
+		public Keyword getVALUE_SUBTLEValueSubtleKeyword_5_0() { return cVALUE_SUBTLEValueSubtleKeyword_5_0; }
+
+		//VALUE_COARSE='valueCoarse'
+		public EnumLiteralDeclaration getVALUE_COARSEEnumLiteralDeclaration_6() { return cVALUE_COARSEEnumLiteralDeclaration_6; }
+
+		//'valueCoarse'
+		public Keyword getVALUE_COARSEValueCoarseKeyword_6_0() { return cVALUE_COARSEValueCoarseKeyword_6_0; }
+
+		//WILDCARD="wildcard"
+		public EnumLiteralDeclaration getWILDCARDEnumLiteralDeclaration_7() { return cWILDCARDEnumLiteralDeclaration_7; }
+
+		//"wildcard"
+		public Keyword getWILDCARDWildcardKeyword_7_0() { return cWILDCARDWildcardKeyword_7_0; }
+
+		//VARIABLE='variable'
+		public EnumLiteralDeclaration getVARIABLEEnumLiteralDeclaration_8() { return cVARIABLEEnumLiteralDeclaration_8; }
+
+		//'variable'
+		public Keyword getVARIABLEVariableKeyword_8_0() { return cVARIABLEVariableKeyword_8_0; }
+	}
+
+	public class ActualFailureTypeElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.ActualFailureType");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cEARLYEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cEARLYEarlyKeyword_0_0 = (Keyword)cEARLYEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cLATEEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cLATELateKeyword_1_0 = (Keyword)cLATEEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cCOMMISSIONEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cCOMMISSIONCommissionKeyword_2_0 = (Keyword)cCOMMISSIONEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cOMISSIONEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cOMISSIONOmissionKeyword_3_0 = (Keyword)cOMISSIONEnumLiteralDeclaration_3.eContents().get(0);
+		private final EnumLiteralDeclaration cVALUE_SUBTLEEnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
+		private final Keyword cVALUE_SUBTLEValueSubtleKeyword_4_0 = (Keyword)cVALUE_SUBTLEEnumLiteralDeclaration_4.eContents().get(0);
+		private final EnumLiteralDeclaration cVALUE_COARSEEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
+		private final Keyword cVALUE_COARSEValueCoarseKeyword_5_0 = (Keyword)cVALUE_COARSEEnumLiteralDeclaration_5.eContents().get(0);
+		
+		//enum ActualFailureType returns FailureType:
+		//	EARLY="early" | LATE="late" | COMMISSION="commission" | OMISSION="omission" | VALUE_SUBTLE="valueSubtle" |
+		//	VALUE_COARSE="valueCoarse";
+		public EnumRule getRule() { return rule; }
+
+		//EARLY="early" | LATE="late" | COMMISSION="commission" | OMISSION="omission" | VALUE_SUBTLE="valueSubtle" |
+		//VALUE_COARSE="valueCoarse"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//EARLY="early"
+		public EnumLiteralDeclaration getEARLYEnumLiteralDeclaration_0() { return cEARLYEnumLiteralDeclaration_0; }
+
+		//"early"
+		public Keyword getEARLYEarlyKeyword_0_0() { return cEARLYEarlyKeyword_0_0; }
+
+		//LATE="late"
+		public EnumLiteralDeclaration getLATEEnumLiteralDeclaration_1() { return cLATEEnumLiteralDeclaration_1; }
+
+		//"late"
+		public Keyword getLATELateKeyword_1_0() { return cLATELateKeyword_1_0; }
+
+		//COMMISSION="commission"
+		public EnumLiteralDeclaration getCOMMISSIONEnumLiteralDeclaration_2() { return cCOMMISSIONEnumLiteralDeclaration_2; }
+
+		//"commission"
+		public Keyword getCOMMISSIONCommissionKeyword_2_0() { return cCOMMISSIONCommissionKeyword_2_0; }
+
+		//OMISSION="omission"
+		public EnumLiteralDeclaration getOMISSIONEnumLiteralDeclaration_3() { return cOMISSIONEnumLiteralDeclaration_3; }
+
+		//"omission"
+		public Keyword getOMISSIONOmissionKeyword_3_0() { return cOMISSIONOmissionKeyword_3_0; }
+
+		//VALUE_SUBTLE="valueSubtle"
+		public EnumLiteralDeclaration getVALUE_SUBTLEEnumLiteralDeclaration_4() { return cVALUE_SUBTLEEnumLiteralDeclaration_4; }
+
+		//"valueSubtle"
+		public Keyword getVALUE_SUBTLEValueSubtleKeyword_4_0() { return cVALUE_SUBTLEValueSubtleKeyword_4_0; }
+
+		//VALUE_COARSE="valueCoarse"
+		public EnumLiteralDeclaration getVALUE_COARSEEnumLiteralDeclaration_5() { return cVALUE_COARSEEnumLiteralDeclaration_5; }
+
+		//"valueCoarse"
+		public Keyword getVALUE_COARSEValueCoarseKeyword_5_0() { return cVALUE_COARSEValueCoarseKeyword_5_0; }
+	}
+
+	public class NoFailureTypeElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.NoFailureType");
+		private final EnumLiteralDeclaration cNO_FAILUREEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
+		private final Keyword cNO_FAILURENoFailureKeyword_0 = (Keyword)cNO_FAILUREEnumLiteralDeclaration.eContents().get(0);
+		
+		//enum NoFailureType returns FailureType:
+		//	NO_FAILURE="noFailure";
+		public EnumRule getRule() { return rule; }
+
+		//NO_FAILURE="noFailure"
+		public EnumLiteralDeclaration getNO_FAILUREEnumLiteralDeclaration() { return cNO_FAILUREEnumLiteralDeclaration; }
+
+		//"noFailure"
+		public Keyword getNO_FAILURENoFailureKeyword_0() { return cNO_FAILURENoFailureKeyword_0; }
+	}
+
+	public class WildcardElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Wildcard");
+		private final EnumLiteralDeclaration cWILDCARDEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
+		private final Keyword cWILDCARDWildcardKeyword_0 = (Keyword)cWILDCARDEnumLiteralDeclaration.eContents().get(0);
+		
+		//enum Wildcard returns FailureType:
+		//	WILDCARD="wildcard";
+		public EnumRule getRule() { return rule; }
+
+		//WILDCARD="wildcard"
+		public EnumLiteralDeclaration getWILDCARDEnumLiteralDeclaration() { return cWILDCARDEnumLiteralDeclaration; }
+
+		//"wildcard"
+		public Keyword getWILDCARDWildcardKeyword_0() { return cWILDCARDWildcardKeyword_0; }
+	}
+
+	public class AavoidableElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Aavoidable");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cINCOMPLETIONEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cINCOMPLETIONIncompletionKeyword_0_0 = (Keyword)cINCOMPLETIONEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cNONENoneKeyword_1_0 = (Keyword)cNONEEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_2_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_2.eContents().get(0);
+		
+		//enum Aavoidable:
+		//	INCOMPLETION='incompletion' | NONE='none' | UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//INCOMPLETION='incompletion' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//INCOMPLETION='incompletion'
+		public EnumLiteralDeclaration getINCOMPLETIONEnumLiteralDeclaration_0() { return cINCOMPLETIONEnumLiteralDeclaration_0; }
+
+		//'incompletion'
+		public Keyword getINCOMPLETIONIncompletionKeyword_0_0() { return cINCOMPLETIONIncompletionKeyword_0_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_1() { return cNONEEnumLiteralDeclaration_1; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_1_0() { return cNONENoneKeyword_1_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_2() { return cUNSPECIFIEDEnumLiteralDeclaration_2; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_2_0() { return cUNSPECIFIEDUnspecifiedKeyword_2_0; }
+	}
+
+	public class CavoidableElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Cavoidable");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cINCONSISTENCYEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cINCONSISTENCYInconsistencyKeyword_0_0 = (Keyword)cINCONSISTENCYEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cNONENoneKeyword_1_0 = (Keyword)cNONEEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_2_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_2.eContents().get(0);
+		
+		//enum Cavoidable:
+		//	INCONSISTENCY='inconsistency' | NONE='none' | UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//INCONSISTENCY='inconsistency' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//INCONSISTENCY='inconsistency'
+		public EnumLiteralDeclaration getINCONSISTENCYEnumLiteralDeclaration_0() { return cINCONSISTENCYEnumLiteralDeclaration_0; }
+
+		//'inconsistency'
+		public Keyword getINCONSISTENCYInconsistencyKeyword_0_0() { return cINCONSISTENCYInconsistencyKeyword_0_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_1() { return cNONEEnumLiteralDeclaration_1; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_1_0() { return cNONENoneKeyword_1_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_2() { return cUNSPECIFIEDEnumLiteralDeclaration_2; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_2_0() { return cUNSPECIFIEDUnspecifiedKeyword_2_0; }
+	}
+
+	public class IavoidableElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Iavoidable");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cINTERFERENCEEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cINTERFERENCEInterferenceKeyword_0_0 = (Keyword)cINTERFERENCEEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cNONENoneKeyword_1_0 = (Keyword)cNONEEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_2_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_2.eContents().get(0);
+		
+		//enum Iavoidable:
+		//	INTERFERENCE='interference' | NONE='none' | UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//INTERFERENCE='interference' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//INTERFERENCE='interference'
+		public EnumLiteralDeclaration getINTERFERENCEEnumLiteralDeclaration_0() { return cINTERFERENCEEnumLiteralDeclaration_0; }
+
+		//'interference'
+		public Keyword getINTERFERENCEInterferenceKeyword_0_0() { return cINTERFERENCEInterferenceKeyword_0_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_1() { return cNONEEnumLiteralDeclaration_1; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_1_0() { return cNONENoneKeyword_1_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_2() { return cUNSPECIFIEDEnumLiteralDeclaration_2; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_2_0() { return cUNSPECIFIEDUnspecifiedKeyword_2_0; }
+	}
+
+	public class DavoidableElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Davoidable");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cIMPERMANENCEEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cIMPERMANENCEImpermanenceKeyword_0_0 = (Keyword)cIMPERMANENCEEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cNONENoneKeyword_1_0 = (Keyword)cNONEEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_2_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_2.eContents().get(0);
+		
+		//enum Davoidable:
+		//	IMPERMANENCE='impermanence' | NONE='none' | UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//IMPERMANENCE='impermanence' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//IMPERMANENCE='impermanence'
+		public EnumLiteralDeclaration getIMPERMANENCEEnumLiteralDeclaration_0() { return cIMPERMANENCEEnumLiteralDeclaration_0; }
+
+		//'impermanence'
+		public Keyword getIMPERMANENCEImpermanenceKeyword_0_0() { return cIMPERMANENCEImpermanenceKeyword_0_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_1() { return cNONEEnumLiteralDeclaration_1; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_1_0() { return cNONENoneKeyword_1_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_2() { return cUNSPECIFIEDEnumLiteralDeclaration_2; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_2_0() { return cUNSPECIFIEDUnspecifiedKeyword_2_0; }
+	}
+
+	public class AmitigationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Amitigation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cALL_OR_NOTHINGEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cALL_OR_NOTHINGAll_or_nothingKeyword_0_0 = (Keyword)cALL_OR_NOTHINGEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cALL_OR_COMPENSATIONEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cALL_OR_COMPENSATIONAll_or_compensationKeyword_1_0 = (Keyword)cALL_OR_COMPENSATIONEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cNONENoneKeyword_2_0 = (Keyword)cNONEEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_3_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_3.eContents().get(0);
+		
+		//enum Amitigation:
+		//	ALL_OR_NOTHING='all_or_nothing' | ALL_OR_COMPENSATION='all_or_compensation' | NONE='none' |
+		//	UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//ALL_OR_NOTHING='all_or_nothing' | ALL_OR_COMPENSATION='all_or_compensation' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//ALL_OR_NOTHING='all_or_nothing'
+		public EnumLiteralDeclaration getALL_OR_NOTHINGEnumLiteralDeclaration_0() { return cALL_OR_NOTHINGEnumLiteralDeclaration_0; }
+
+		//'all_or_nothing'
+		public Keyword getALL_OR_NOTHINGAll_or_nothingKeyword_0_0() { return cALL_OR_NOTHINGAll_or_nothingKeyword_0_0; }
+
+		//ALL_OR_COMPENSATION='all_or_compensation'
+		public EnumLiteralDeclaration getALL_OR_COMPENSATIONEnumLiteralDeclaration_1() { return cALL_OR_COMPENSATIONEnumLiteralDeclaration_1; }
+
+		//'all_or_compensation'
+		public Keyword getALL_OR_COMPENSATIONAll_or_compensationKeyword_1_0() { return cALL_OR_COMPENSATIONAll_or_compensationKeyword_1_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_2() { return cNONEEnumLiteralDeclaration_2; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_2_0() { return cNONENoneKeyword_2_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_3() { return cUNSPECIFIEDEnumLiteralDeclaration_3; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_3_0() { return cUNSPECIFIEDUnspecifiedKeyword_3_0; }
+	}
+
+	public class CmitigationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Cmitigation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cFULL_CONSISTENCYEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cFULL_CONSISTENCYFull_consistencyKeyword_0_0 = (Keyword)cFULL_CONSISTENCYEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cRANGE_VIOLATION_ALLOWEDRange_violation_allowedKeyword_1_0 = (Keyword)cRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cNONENoneKeyword_2_0 = (Keyword)cNONEEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_3_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_3.eContents().get(0);
+		
+		//enum Cmitigation:
+		//	FULL_CONSISTENCY='full_consistency' | RANGE_VIOLATION_ALLOWED='range_violation_allowed' | NONE='none' |
+		//	UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//FULL_CONSISTENCY='full_consistency' | RANGE_VIOLATION_ALLOWED='range_violation_allowed' | NONE='none' |
+		//UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//FULL_CONSISTENCY='full_consistency'
+		public EnumLiteralDeclaration getFULL_CONSISTENCYEnumLiteralDeclaration_0() { return cFULL_CONSISTENCYEnumLiteralDeclaration_0; }
+
+		//'full_consistency'
+		public Keyword getFULL_CONSISTENCYFull_consistencyKeyword_0_0() { return cFULL_CONSISTENCYFull_consistencyKeyword_0_0; }
+
+		//RANGE_VIOLATION_ALLOWED='range_violation_allowed'
+		public EnumLiteralDeclaration getRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1() { return cRANGE_VIOLATION_ALLOWEDEnumLiteralDeclaration_1; }
+
+		//'range_violation_allowed'
+		public Keyword getRANGE_VIOLATION_ALLOWEDRange_violation_allowedKeyword_1_0() { return cRANGE_VIOLATION_ALLOWEDRange_violation_allowedKeyword_1_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_2() { return cNONEEnumLiteralDeclaration_2; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_2_0() { return cNONENoneKeyword_2_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_3() { return cUNSPECIFIEDEnumLiteralDeclaration_3; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_3_0() { return cUNSPECIFIEDUnspecifiedKeyword_3_0; }
+	}
+
+	public class ImitigationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Imitigation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cSERIALIZABLEEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cSERIALIZABLESerializableKeyword_0_0 = (Keyword)cSERIALIZABLEEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cPORTABLE_LEVELEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cPORTABLE_LEVELPortable_levelKeyword_1_0 = (Keyword)cPORTABLE_LEVELEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cNONENoneKeyword_2_0 = (Keyword)cNONEEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_3_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_3.eContents().get(0);
+		
+		//enum Imitigation:
+		//	SERIALIZABLE='serializable' | PORTABLE_LEVEL='portable_level' | NONE='none' | UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//SERIALIZABLE='serializable' | PORTABLE_LEVEL='portable_level' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//SERIALIZABLE='serializable'
+		public EnumLiteralDeclaration getSERIALIZABLEEnumLiteralDeclaration_0() { return cSERIALIZABLEEnumLiteralDeclaration_0; }
+
+		//'serializable'
+		public Keyword getSERIALIZABLESerializableKeyword_0_0() { return cSERIALIZABLESerializableKeyword_0_0; }
+
+		//PORTABLE_LEVEL='portable_level'
+		public EnumLiteralDeclaration getPORTABLE_LEVELEnumLiteralDeclaration_1() { return cPORTABLE_LEVELEnumLiteralDeclaration_1; }
+
+		//'portable_level'
+		public Keyword getPORTABLE_LEVELPortable_levelKeyword_1_0() { return cPORTABLE_LEVELPortable_levelKeyword_1_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_2() { return cNONEEnumLiteralDeclaration_2; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_2_0() { return cNONENoneKeyword_2_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_3() { return cUNSPECIFIEDEnumLiteralDeclaration_3; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_3_0() { return cUNSPECIFIEDUnspecifiedKeyword_3_0; }
+	}
+
+	public class DmitigationElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.polarsys.chess.xtext.FlaDsl.Dmitigation");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cNO_LOSSEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cNO_LOSSNo_lossKeyword_0_0 = (Keyword)cNO_LOSSEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cPARTIAL_LOSS_ALLOWEDPartial_loss_allowedKeyword_1_0 = (Keyword)cPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cNONEEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cNONENoneKeyword_2_0 = (Keyword)cNONEEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cUNSPECIFIEDUnspecifiedKeyword_3_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_3.eContents().get(0);
+		
+		//enum Dmitigation:
+		//	NO_LOSS='no_loss' | PARTIAL_LOSS_ALLOWED='partial_loss_allowed' | NONE='none' | UNSPECIFIED='unspecified';
+		public EnumRule getRule() { return rule; }
+
+		//NO_LOSS='no_loss' | PARTIAL_LOSS_ALLOWED='partial_loss_allowed' | NONE='none' | UNSPECIFIED='unspecified'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//NO_LOSS='no_loss'
+		public EnumLiteralDeclaration getNO_LOSSEnumLiteralDeclaration_0() { return cNO_LOSSEnumLiteralDeclaration_0; }
+
+		//'no_loss'
+		public Keyword getNO_LOSSNo_lossKeyword_0_0() { return cNO_LOSSNo_lossKeyword_0_0; }
+
+		//PARTIAL_LOSS_ALLOWED='partial_loss_allowed'
+		public EnumLiteralDeclaration getPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1() { return cPARTIAL_LOSS_ALLOWEDEnumLiteralDeclaration_1; }
+
+		//'partial_loss_allowed'
+		public Keyword getPARTIAL_LOSS_ALLOWEDPartial_loss_allowedKeyword_1_0() { return cPARTIAL_LOSS_ALLOWEDPartial_loss_allowedKeyword_1_0; }
+
+		//NONE='none'
+		public EnumLiteralDeclaration getNONEEnumLiteralDeclaration_2() { return cNONEEnumLiteralDeclaration_2; }
+
+		//'none'
+		public Keyword getNONENoneKeyword_2_0() { return cNONENoneKeyword_2_0; }
+
+		//UNSPECIFIED='unspecified'
+		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_3() { return cUNSPECIFIEDEnumLiteralDeclaration_3; }
+
+		//'unspecified'
+		public Keyword getUNSPECIFIEDUnspecifiedKeyword_3_0() { return cUNSPECIFIEDUnspecifiedKeyword_3_0; }
+	}
+	
+	private final BehaviourElements pBehaviour;
+	private final ExpressionElements pExpression;
+	private final LhsElements pLhs;
+	private final RhsElements pRhs;
+	private final InputExpressionElements pInputExpression;
+	private final OutputExpressionElements pOutputExpression;
+	private final InFailureExprElements pInFailureExpr;
+	private final OutFailureExprElements pOutFailureExpr;
+	private final DefinitionsElements pDefinitions;
+	private final FailureDefinitionElements pFailureDefinition;
+	private final NoFailureDefinitionElements pNoFailureDefinition;
+	private final ComplexNofailureDefinitionElements pComplexNofailureDefinition;
+	private final WildcardDefinitionElements pWildcardDefinition;
+	private final VariableDefinitionElements pVariableDefinition;
+	private final FailureTypeElements eFailureType;
+	private final ActualFailureTypeElements eActualFailureType;
+	private final NoFailureTypeElements eNoFailureType;
+	private final WildcardElements eWildcard;
+	private final ACIDavoidableElements pACIDavoidable;
+	private final AavoidableElements eAavoidable;
+	private final CavoidableElements eCavoidable;
+	private final IavoidableElements eIavoidable;
+	private final DavoidableElements eDavoidable;
+	private final ACIDMitigationElements pACIDMitigation;
+	private final AmitigationElements eAmitigation;
+	private final CmitigationElements eCmitigation;
+	private final ImitigationElements eImitigation;
+	private final DmitigationElements eDmitigation;
+	private final FQNElements pFQN;
+	
+	private final Grammar grammar;
+
+	private final TerminalsGrammarAccess gaTerminals;
+
+	@Inject
+	public FlaDslGrammarAccess(GrammarProvider grammarProvider,
+		TerminalsGrammarAccess gaTerminals) {
+		this.grammar = internalFindGrammar(grammarProvider);
+		this.gaTerminals = gaTerminals;
+		this.pBehaviour = new BehaviourElements();
+		this.pExpression = new ExpressionElements();
+		this.pLhs = new LhsElements();
+		this.pRhs = new RhsElements();
+		this.pInputExpression = new InputExpressionElements();
+		this.pOutputExpression = new OutputExpressionElements();
+		this.pInFailureExpr = new InFailureExprElements();
+		this.pOutFailureExpr = new OutFailureExprElements();
+		this.pDefinitions = new DefinitionsElements();
+		this.pFailureDefinition = new FailureDefinitionElements();
+		this.pNoFailureDefinition = new NoFailureDefinitionElements();
+		this.pComplexNofailureDefinition = new ComplexNofailureDefinitionElements();
+		this.pWildcardDefinition = new WildcardDefinitionElements();
+		this.pVariableDefinition = new VariableDefinitionElements();
+		this.eFailureType = new FailureTypeElements();
+		this.eActualFailureType = new ActualFailureTypeElements();
+		this.eNoFailureType = new NoFailureTypeElements();
+		this.eWildcard = new WildcardElements();
+		this.pACIDavoidable = new ACIDavoidableElements();
+		this.eAavoidable = new AavoidableElements();
+		this.eCavoidable = new CavoidableElements();
+		this.eIavoidable = new IavoidableElements();
+		this.eDavoidable = new DavoidableElements();
+		this.pACIDMitigation = new ACIDMitigationElements();
+		this.eAmitigation = new AmitigationElements();
+		this.eCmitigation = new CmitigationElements();
+		this.eImitigation = new ImitigationElements();
+		this.eDmitigation = new DmitigationElements();
+		this.pFQN = new FQNElements();
+	}
+	
+	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
+		Grammar grammar = grammarProvider.getGrammar(this);
+		while (grammar != null) {
+			if ("org.polarsys.chess.xtext.FlaDsl".equals(grammar.getName())) {
+				return grammar;
+			}
+			List<Grammar> grammars = grammar.getUsedGrammars();
+			if (!grammars.isEmpty()) {
+				grammar = grammars.iterator().next();
+			} else {
+				return null;
+			}
+		}
+		return grammar;
+	}
+	
+	@Override
+	public Grammar getGrammar() {
+		return grammar;
+	}
+	
+
+	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
+		return gaTerminals;
+	}
+
+	
+	///*
+	// * FLA Grammar
+	// */ Behaviour:
+	//	rules+=Expression+;
+	public BehaviourElements getBehaviourAccess() {
+		return pBehaviour;
+	}
+	
+	public ParserRule getBehaviourRule() {
+		return getBehaviourAccess().getRule();
+	}
+
+	//Expression:
+	//	'FLA:' lhs=Lhs '->' rhs=Rhs ';';
+	public ExpressionElements getExpressionAccess() {
+		return pExpression;
+	}
+	
+	public ParserRule getExpressionRule() {
+		return getExpressionAccess().getRule();
+	}
+
+	//Lhs:
+	//	failures+=InputExpression (',' failures+=InputExpression)*;
+	public LhsElements getLhsAccess() {
+		return pLhs;
+	}
+	
+	public ParserRule getLhsRule() {
+		return getLhsAccess().getRule();
+	}
+
+	//Rhs:
+	//	failures+=OutputExpression (',' failures+=OutputExpression)*;
+	public RhsElements getRhsAccess() {
+		return pRhs;
+	}
+	
+	public ParserRule getRhsRule() {
+		return getRhsAccess().getRule();
+	}
+
+	//InputExpression:
+	//	(ref=[uml::Port] | "undefined") '.' failureExpr=InFailureExpr;
+	public InputExpressionElements getInputExpressionAccess() {
+		return pInputExpression;
+	}
+	
+	public ParserRule getInputExpressionRule() {
+		return getInputExpressionAccess().getRule();
+	}
+
+	//OutputExpression:
+	//	(ref=[uml::Port] | "undefined") '.' failureExpr=OutFailureExpr;
+	public OutputExpressionElements getOutputExpressionAccess() {
+		return pOutputExpression;
+	}
+	
+	public ParserRule getOutputExpressionRule() {
+		return getOutputExpressionAccess().getRule();
+	}
+
+	//InFailureExpr:
+	//	failures+=WildcardDefinition | failures+=NoFailureDefinition | failures+=FailureDefinition |
+	//	'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | failures+=VariableDefinition;
+	public InFailureExprElements getInFailureExprAccess() {
+		return pInFailureExpr;
+	}
+	
+	public ParserRule getInFailureExprRule() {
+		return getInFailureExprAccess().getRule();
+	}
+
+	//OutFailureExpr:
+	//	failures+=NoFailureDefinition | failures+=ComplexNofailureDefinition | failures+=FailureDefinition |
+	//	'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | failures+=VariableDefinition;
+	public OutFailureExprElements getOutFailureExprAccess() {
+		return pOutFailureExpr;
+	}
+	
+	public ParserRule getOutFailureExprRule() {
+		return getOutFailureExprAccess().getRule();
+	}
+
+	//Definitions:
+	//	FailureDefinition | NoFailureDefinition | ComplexNofailureDefinition | WildcardDefinition | VariableDefinition;
+	public DefinitionsElements getDefinitionsAccess() {
+		return pDefinitions;
+	}
+	
+	public ParserRule getDefinitionsRule() {
+		return getDefinitionsAccess().getRule();
+	}
+
+	//FailureDefinition:
+	//	{FailureDefinition} type=ActualFailureType ('.' acidAvoidable=ACIDavoidable)?;
+	public FailureDefinitionElements getFailureDefinitionAccess() {
+		return pFailureDefinition;
+	}
+	
+	public ParserRule getFailureDefinitionRule() {
+		return getFailureDefinitionAccess().getRule();
+	}
+
+	//NoFailureDefinition:
+	//	{NoFailureDefinition} 'noFailure';
+	public NoFailureDefinitionElements getNoFailureDefinitionAccess() {
+		return pNoFailureDefinition;
+	}
+	
+	public ParserRule getNoFailureDefinitionRule() {
+		return getNoFailureDefinitionAccess().getRule();
+	}
+
+	//ComplexNofailureDefinition:
+	//	{NoFailureDefinition} 'noFailure' '.' acidMitigation=ACIDMitigation;
+	public ComplexNofailureDefinitionElements getComplexNofailureDefinitionAccess() {
+		return pComplexNofailureDefinition;
+	}
+	
+	public ParserRule getComplexNofailureDefinitionRule() {
+		return getComplexNofailureDefinitionAccess().getRule();
+	}
+
+	//WildcardDefinition:
+	//	{WildcardDefinition} 'wildcard';
+	public WildcardDefinitionElements getWildcardDefinitionAccess() {
+		return pWildcardDefinition;
+	}
+	
+	public ParserRule getWildcardDefinitionRule() {
+		return getWildcardDefinitionAccess().getRule();
+	}
+
+	//VariableDefinition:
+	//	{VariableDefinition} variableName=ID;
+	public VariableDefinitionElements getVariableDefinitionAccess() {
+		return pVariableDefinition;
+	}
+	
+	public ParserRule getVariableDefinitionRule() {
+		return getVariableDefinitionAccess().getRule();
+	}
+
+	//enum FailureType:
+	//	NO_FAILURE='noFailure' | EARLY='early' | LATE='late' | COMMISSION='commission' | OMISSION='omission' |
+	//	VALUE_SUBTLE='valueSubtle' | VALUE_COARSE='valueCoarse' | WILDCARD="wildcard" | VARIABLE='variable';
+	public FailureTypeElements getFailureTypeAccess() {
+		return eFailureType;
+	}
+	
+	public EnumRule getFailureTypeRule() {
+		return getFailureTypeAccess().getRule();
+	}
+
+	//enum ActualFailureType returns FailureType:
+	//	EARLY="early" | LATE="late" | COMMISSION="commission" | OMISSION="omission" | VALUE_SUBTLE="valueSubtle" |
+	//	VALUE_COARSE="valueCoarse";
+	public ActualFailureTypeElements getActualFailureTypeAccess() {
+		return eActualFailureType;
+	}
+	
+	public EnumRule getActualFailureTypeRule() {
+		return getActualFailureTypeAccess().getRule();
+	}
+
+	//enum NoFailureType returns FailureType:
+	//	NO_FAILURE="noFailure";
+	public NoFailureTypeElements getNoFailureTypeAccess() {
+		return eNoFailureType;
+	}
+	
+	public EnumRule getNoFailureTypeRule() {
+		return getNoFailureTypeAccess().getRule();
+	}
+
+	//enum Wildcard returns FailureType:
+	//	WILDCARD="wildcard";
+	public WildcardElements getWildcardAccess() {
+		return eWildcard;
+	}
+	
+	public EnumRule getWildcardRule() {
+		return getWildcardAccess().getRule();
+	}
+
+	//ACIDavoidable:
+	//	a=Aavoidable '.' c=Cavoidable '.' i=Iavoidable '.' d=Davoidable;
+	public ACIDavoidableElements getACIDavoidableAccess() {
+		return pACIDavoidable;
+	}
+	
+	public ParserRule getACIDavoidableRule() {
+		return getACIDavoidableAccess().getRule();
+	}
+
+	//enum Aavoidable:
+	//	INCOMPLETION='incompletion' | NONE='none' | UNSPECIFIED='unspecified';
+	public AavoidableElements getAavoidableAccess() {
+		return eAavoidable;
+	}
+	
+	public EnumRule getAavoidableRule() {
+		return getAavoidableAccess().getRule();
+	}
+
+	//enum Cavoidable:
+	//	INCONSISTENCY='inconsistency' | NONE='none' | UNSPECIFIED='unspecified';
+	public CavoidableElements getCavoidableAccess() {
+		return eCavoidable;
+	}
+	
+	public EnumRule getCavoidableRule() {
+		return getCavoidableAccess().getRule();
+	}
+
+	//enum Iavoidable:
+	//	INTERFERENCE='interference' | NONE='none' | UNSPECIFIED='unspecified';
+	public IavoidableElements getIavoidableAccess() {
+		return eIavoidable;
+	}
+	
+	public EnumRule getIavoidableRule() {
+		return getIavoidableAccess().getRule();
+	}
+
+	//enum Davoidable:
+	//	IMPERMANENCE='impermanence' | NONE='none' | UNSPECIFIED='unspecified';
+	public DavoidableElements getDavoidableAccess() {
+		return eDavoidable;
+	}
+	
+	public EnumRule getDavoidableRule() {
+		return getDavoidableAccess().getRule();
+	}
+
+	//ACIDMitigation:
+	//	a=Amitigation '.' c=Cmitigation '.' i=Imitigation '.' d=Dmitigation;
+	public ACIDMitigationElements getACIDMitigationAccess() {
+		return pACIDMitigation;
+	}
+	
+	public ParserRule getACIDMitigationRule() {
+		return getACIDMitigationAccess().getRule();
+	}
+
+	//enum Amitigation:
+	//	ALL_OR_NOTHING='all_or_nothing' | ALL_OR_COMPENSATION='all_or_compensation' | NONE='none' |
+	//	UNSPECIFIED='unspecified';
+	public AmitigationElements getAmitigationAccess() {
+		return eAmitigation;
+	}
+	
+	public EnumRule getAmitigationRule() {
+		return getAmitigationAccess().getRule();
+	}
+
+	//enum Cmitigation:
+	//	FULL_CONSISTENCY='full_consistency' | RANGE_VIOLATION_ALLOWED='range_violation_allowed' | NONE='none' |
+	//	UNSPECIFIED='unspecified';
+	public CmitigationElements getCmitigationAccess() {
+		return eCmitigation;
+	}
+	
+	public EnumRule getCmitigationRule() {
+		return getCmitigationAccess().getRule();
+	}
+
+	//enum Imitigation:
+	//	SERIALIZABLE='serializable' | PORTABLE_LEVEL='portable_level' | NONE='none' | UNSPECIFIED='unspecified';
+	public ImitigationElements getImitigationAccess() {
+		return eImitigation;
+	}
+	
+	public EnumRule getImitigationRule() {
+		return getImitigationAccess().getRule();
+	}
+
+	//enum Dmitigation:
+	//	NO_LOSS='no_loss' | PARTIAL_LOSS_ALLOWED='partial_loss_allowed' | NONE='none' | UNSPECIFIED='unspecified';
+	public DmitigationElements getDmitigationAccess() {
+		return eDmitigation;
+	}
+	
+	public EnumRule getDmitigationRule() {
+		return getDmitigationAccess().getRule();
+	}
+
+	///*
+	// * Additional rule to refer UML elements in a Model
+	// */ FQN:
+	//	ID ('::' ID)*;
+	public FQNElements getFQNAccess() {
+		return pFQN;
+	}
+	
+	public ParserRule getFQNRule() {
+		return getFQNAccess().getRule();
+	}
+
+	//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'+;
+	public TerminalRule getINTRule() {
+		return gaTerminals.getINTRule();
+	} 
+
+	//terminal STRING:
+	//	'"' ('\\' . | !('\\' | '"'))* '"' | "'" ('\\' . | !('\\' | "'"))* "'";
+	public TerminalRule getSTRINGRule() {
+		return gaTerminals.getSTRINGRule();
+	} 
+
+	//terminal ML_COMMENT:
+	//	'/*'->'*/';
+	public TerminalRule getML_COMMENTRule() {
+		return gaTerminals.getML_COMMENTRule();
+	} 
+
+	//terminal SL_COMMENT:
+	//	'//' !('\n' | '\r')* ('\r'? '\n')?;
+	public TerminalRule getSL_COMMENTRule() {
+		return gaTerminals.getSL_COMMENTRule();
+	} 
+
+	//terminal WS:
+	//	' ' | '\t' | '\r' | '\n'+;
+	public TerminalRule getWSRule() {
+		return gaTerminals.getWSRule();
+	} 
+
+	//terminal ANY_OTHER:
+	//	.;
+	public TerminalRule getANY_OTHERRule() {
+		return gaTerminals.getANY_OTHERRule();
+	} 
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/validation/AbstractFlaDslValidator.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/validation/AbstractFlaDslValidator.java
new file mode 100644
index 0000000..b4a870a
--- /dev/null
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src-gen/org/polarsys/chess/xtext/validation/AbstractFlaDslValidator.java
@@ -0,0 +1,20 @@
+/*
+ * generated by Xtext
+ */
+package org.polarsys.chess.xtext.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.ComposedChecks;
+
+@ComposedChecks(validators= {org.eclipse.xtext.validation.ImportUriValidator.class})
+public class AbstractFlaDslValidator extends org.eclipse.xtext.validation.AbstractDeclarativeValidator {
+
+	@Override
+	protected List<EPackage> getEPackages() {
+	    List<EPackage> result = new ArrayList<EPackage>();
+	    result.add(org.polarsys.chess.xtext.flaDsl.FlaDslPackage.eINSTANCE);
+		return result;
+	}
+}
diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslRuntimeModule.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslRuntimeModule.java
index a8947c6..6af7490 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslRuntimeModule.java
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslRuntimeModule.java
@@ -1,21 +1,6 @@
 /*

  * generated by Xtext

  */

-/*------------------------------------------------------------------------------

- -

- - Copyright (c) 2013, 2015 Intecs SpA 

- - 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:

- - 

- - Stefano Puri stefano.puri@intecs.it

- -  

- - Initial API and implementation and/or initial documentation

- ------------------------------------------------------------------------------*/

-

 package org.polarsys.chess.xtext;

 

 /**

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslStandaloneSetup.java b/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslStandaloneSetup.java
index 677c2fd..632413a 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslStandaloneSetup.java
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/FlaDslStandaloneSetup.java
@@ -1,25 +1,8 @@
 /*

  * generated by Xtext

  */

-/*------------------------------------------------------------------------------

- -

- - Copyright (c) 2013, 2015 Intecs SpA 

- - 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:

- - 

- - Stefano Puri stefano.puri@intecs.it

- -  

- - Initial API and implementation and/or initial documentation

- ------------------------------------------------------------------------------*/

-

 package org.polarsys.chess.xtext;

 

-import org.polarsys.chess.xtext.FlaDslStandaloneSetupGenerated;

-

 /**

  * Initialization support for running Xtext languages 

  * without equinox extension registry

diff --git a/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/validation/FlaDslValidator.xtend b/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/validation/FlaDslValidator.xtend
index 6ed29cd..f5e9df4 100644
--- a/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/validation/FlaDslValidator.xtend
+++ b/plugins/fla/org.polarsys.chess.xtext.fladsl/src/org/polarsys/chess/xtext/validation/FlaDslValidator.xtend
@@ -25,7 +25,7 @@
  *

  * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation

  */

-class FlaDslValidator extends AbstractFlaDslValidator {

+class FlaDslValidator  {

 

 //  public static val INVALID_NAME = 'invalidName'

 //

diff --git a/plugins/org.polarsys.chess.commands/src/org/polarsys/chess/commands/ShowRTInformationCommand.java b/plugins/org.polarsys.chess.commands/src/org/polarsys/chess/commands/ShowRTInformationCommand.java
index b2b187f..b88d9db 100644
--- a/plugins/org.polarsys.chess.commands/src/org/polarsys/chess/commands/ShowRTInformationCommand.java
+++ b/plugins/org.polarsys.chess.commands/src/org/polarsys/chess/commands/ShowRTInformationCommand.java
@@ -122,7 +122,10 @@
 			if (temp instanceof BasicCompartmentImpl){
 				Iterator iter2 = ((BasicCompartmentImpl) temp).getPersistedChildren().iterator();
 				while (iter2.hasNext()){
-					showHideRT((Shape)iter2.next(), visibility);
+					Object obj = iter2.next();
+					if(obj instanceof Shape){
+						showHideRT((Shape)obj, visibility);
+					}
 				}
 			}
 		}