Index: branches/xtext-MDT/org.modelica.xtext/.classpath
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/.classpath	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/.classpath	(revision 540)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
Index: branches/xtext-MDT/org.modelica.xtext/.project
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/.project	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/.project	(revision 540)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.modelica.xtext</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtend.shared.ui.xtendBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
+	</natures>
+</projectDescription>
Index: branches/xtext-MDT/org.modelica.xtext/META-INF/MANIFEST.MF
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/META-INF/MANIFEST.MF	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/META-INF/MANIFEST.MF	(revision 540)
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.modelica.xtext
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0
+Bundle-SymbolicName: org.modelica.xtext; singleton:=true
+Eclipse-RegisterBuddy: org.eclipse.xtext.log4j
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext,
+ org.eclipse.xtext.generator;resolution:=optional,
+ de.itemis.xtext.antlr;resolution:=optional,
+ org.apache.commons.logging;resolution:=optional,
+ org.eclipse.emf.codegen.ecore;resolution:=optional,
+ org.eclipse.xtext.log4j;resolution:=optional,
+ org.eclipse.emf.mwe.utils;resolution:=optional,
+ org.eclipse.emf.mwe.core;resolution:=optional,
+ com.ibm.icu;resolution:=optional,
+ org.eclipse.xtext.xtend;resolution:=optional,
+ org.eclipse.xtext.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.antlr.runtime,
+ org.eclipse.xtend
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.modelica.xtext,
+ org.modelica.xtext.services,
+ org.modelica.xtext.modelicaBase,
+ org.modelica.xtext.modelicaBase.impl,
+ org.modelica.xtext.modelicaBase.util,
+ org.modelica.xtext.parseTreeConstruction,
+ org.modelica.xtext.parser.antlr,
+ org.modelica.xtext.validation
Index: branches/xtext-MDT/org.modelica.xtext/build.properties
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/build.properties	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/build.properties	(revision 540)
@@ -0,0 +1,4 @@
+source.. = src/,src-gen/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
Index: branches/xtext-MDT/org.modelica.xtext/plugin.xml
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/plugin.xml	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/plugin.xml	(revision 540)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.modelica.org/xtext/ModelicaBase" 
+       class = "org.modelica.xtext.modelicaBase.ModelicaBasePackage"
+       genModel = "org/modelica/xtext/ModelicaBase.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
Index: branches/xtext-MDT/org.modelica.xtext/plugin.xml_gen
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/plugin.xml_gen	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/plugin.xml_gen	(revision 540)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.modelica.org/xtext/ModelicaBase" 
+       class = "org.modelica.xtext.modelicaBase.ModelicaBasePackage"
+       genModel = "org/modelica/xtext/ModelicaBase.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/AbstractModelicaBaseRuntimeModule.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/AbstractModelicaBaseRuntimeModule.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/AbstractModelicaBaseRuntimeModule.java	(revision 540)
@@ -0,0 +1,96 @@
+
+/*
+ * generated by Xtext
+ */
+package org.modelica.xtext;
+
+import org.eclipse.xtext.Constants;
+import org.eclipse.xtext.service.DefaultRuntimeModule;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+
+/**
+ * Manual modifications go to {org.modelica.xtext.ModelicaBaseRuntimeModule}
+ */
+public abstract class AbstractModelicaBaseRuntimeModule extends DefaultRuntimeModule {
+	
+	@Override
+	public void configure(Binder binder) {
+		super.configure(binder);
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance(
+			"org.modelica.xtext.ModelicaBase");
+	}
+	
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return org.modelica.xtext.services.ModelicaBaseGrammarAccess.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parseTreeConstructor.ParseTreeConstructorFragment
+	public Class<? extends org.eclipse.xtext.parsetree.reconstr.IParseTreeConstructor> bindIParseTreeConstructor() {
+		return org.modelica.xtext.parseTreeConstruction.ModelicaBaseParsetreeConstructor.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrParser> bindIAntlrParser() {
+		return org.modelica.xtext.parser.antlr.ModelicaBaseParser.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.ITokenToStringConverter> bindITokenToStringConverter() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
+		return org.modelica.xtext.parser.antlr.ModelicaBaseAntlrTokenFileProvider.class;
+	}
+
+	// contributed by de.itemis.xtext.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.Lexer> bindLexer() {
+		return org.modelica.xtext.parser.antlr.internal.InternalModelicaBaseLexer.class;
+	}
+
+	// contributed by de.itemis.xtext.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.JavaValidatorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.modelica.xtext.validation.ModelicaBaseJavaValidator> bindModelicaBaseJavaValidator() {
+		return org.modelica.xtext.validation.ModelicaBaseJavaValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.CheckFragment
+	public Class<? extends org.eclipse.xtend.expression.ExecutionContext> bindExecutionContext() {
+		return org.eclipse.xtext.xtend.InjectableExecutionContext.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.CheckFragment
+	public Class<? extends org.eclipse.xtend.expression.ResourceManager> bindResourceManager() {
+		return org.eclipse.xtext.xtend.InjectableResourceManager.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.CheckFragment
+	public java.lang.ClassLoader bindClassLoaderToInstance() {
+		return AbstractModelicaBaseRuntimeModule.class.getClassLoader();
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.CheckFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.modelica.xtext.validation.ModelicaBaseCheckValidator> bindModelicaBaseCheckValidator() {
+		return org.modelica.xtext.validation.ModelicaBaseCheckValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.JavaScopingFragment
+	public Class<? extends org.eclipse.xtext.scoping.IScopeProvider> bindIScopeProvider() {
+		return org.modelica.xtext.scoping.ModelicaBaseScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.formatting.FormatterFragment
+	public Class<? extends org.eclipse.xtext.formatting.IFormatter> bindIFormatter() {
+		return org.modelica.xtext.formatting.ModelicaBaseFormatter.class;
+	}
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.ecore
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.ecore	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.ecore	(revision 540)
@@ -0,0 +1,257 @@
+<?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="modelicaBase"
+    nsURI="http://www.modelica.org/xtext/ModelicaBase" nsPrefix="modelicaBase">
+  <eClassifiers xsi:type="ecore:EClass" name="StorageUnit">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="classDefinition" upperBound="-1"
+        eType="#//ClassDefinition" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EntityDefinition">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ClassDefinition" eSuperTypes="#//EntityDefinition #//ClassElement #//ElementRedeclaration">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="encapsulated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="partial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="expandable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classType" eType="#//ClassType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//ClassModification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elemList" upperBound="-1"
+        eType="#//ElementList" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initialEquationClauses"
+        upperBound="-1" eType="#//initial_equation_rule_clause" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initialAlgorithmClauses"
+        upperBound="-1" eType="#//initial_algorithm_clause" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="equationClauses" upperBound="-1"
+        eType="#//EquationClause" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="algorithmClauses" upperBound="-1"
+        eType="#//algorithm_clause" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="extClause" eType="#//ExternalClause"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ClassType">
+    <eLiterals name="CLASS" literal="class"/>
+    <eLiterals name="MODEL" value="1" literal="model"/>
+    <eLiterals name="RECORD" value="2" literal="record"/>
+    <eLiterals name="BLOCK" value="3" literal="block"/>
+    <eLiterals name="CONNECTOR" value="4" literal="connector"/>
+    <eLiterals name="TYPE" value="5" literal="type"/>
+    <eLiterals name="PACKAGE" value="6" literal="package"/>
+    <eLiterals name="FUNCTION" value="7" literal="function"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PartialDerivative" eSuperTypes="#//EntityDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ClassModification" eSuperTypes="#//EntityDefinition #//Modification #//Annotation">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classType" eType="#//ClassType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpecifier" eType="#//TypeSpecifier"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//ClassModification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
+        eType="#//argument" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ClassOverloading" eSuperTypes="#//EntityDefinition">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classType" eType="#//ClassType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Enumeration" eSuperTypes="#//EntityDefinition">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classType" eType="#//ClassType"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ident" unique="false" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enumComments" upperBound="-1"
+        eType="#//Comment" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ExternalClause">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="languageSpecification"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" eType="#//Annotation"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="extAnnotation" eType="#//Annotation"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ElementList">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
+        eType="#//ClassElement" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
+        eType="#//Annotation" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ClassElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ReplaceableElementClause" eSuperTypes="#//ClassElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="entity" eType="#//ClassElement"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constrain" eType="#//ConstrainingClause"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ImportClause" eSuperTypes="#//ClassElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="asName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ExtendsClause" eSuperTypes="#//ClassElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="baseClass" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//ClassModification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" eType="#//Annotation"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ConstrainingClause">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//ClassModification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ComponentClause" eSuperTypes="#//ClassElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typePrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpecifier" eType="#//TypeSpecifier"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declarations" upperBound="-1"
+        eType="#//ComponentDeclaration" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeSpecifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subscripts" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ComponentDeclaration">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subscripts" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//Modification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Modification">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="expression" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SimpleModification" eSuperTypes="#//Modification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="argument"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ElementModification" eSuperTypes="#//argument">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="componetRef" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//Modification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ElementRedeclaration" eSuperTypes="#//argument"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ElementReplaceableClause" eSuperTypes="#//argument #//ElementRedeclaration">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="element" eType="#//ElementRedeclaration"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constraint" eType="#//ConstrainingClause"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ElementComponentClause" eSuperTypes="#//ElementRedeclaration">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typePrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpecifier" eType="#//TypeSpecifier"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subscripts" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//Modification"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EquationClause" eSuperTypes="#//initial_equation_rule_clause">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="equationRules" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
+        eType="#//Annotation" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="algorithm_clause" eSuperTypes="#//initial_algorithm_clause">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="algorithmRules" upperBound="-1"
+        eType="#//algorithm" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
+        eType="#//Annotation" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="initial_equation_rule_clause"/>
+  <eClassifiers xsi:type="ecore:EClass" name="initial_algorithm_clause"/>
+  <eClassifiers xsi:type="ecore:EClass" name="equation_rule">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="algorithm">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ConditionalEquationRule" eSuperTypes="#//equation_rule">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenEquationClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseifClauses" upperBound="-1"
+        eType="#//equation_rule_elseif" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseEquationClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ConditionAlgorithmRule" eSuperTypes="#//algorithm">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenAlgorithmClauses" upperBound="-1"
+        eType="#//algorithm" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseifClauses" upperBound="-1"
+        eType="#//algorithm_elseif" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseAlgotithmClauses" upperBound="-1"
+        eType="#//algorithm" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ForEquationClause" eSuperTypes="#//equation_rule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="forIndices" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="equationClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ForAlgorithmClause" eSuperTypes="#//algorithm">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="forIndices" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="algorithmClauses" upperBound="-1"
+        eType="#//algorithm" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WhileClause" eSuperTypes="#//algorithm">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="algorithmClauses" upperBound="-1"
+        eType="#//algorithm" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="when_clause_e" eSuperTypes="#//equation_rule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenEquationClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseWhenClauses" upperBound="-1"
+        eType="#//else_when_e" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="else_when_e">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenEquationClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="when_clause_a" eSuperTypes="#//algorithm">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenAlgorithmClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseWhenClauses" upperBound="-1"
+        eType="#//else_when_a" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="else_when_a">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenAlgorithmClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="equation_rule_elseif">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenEquationClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="algorithm_elseif">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="condition" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenAlgorithmClauses" upperBound="-1"
+        eType="#//equation_rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Comment">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="string" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotation" eType="#//Annotation"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Annotation"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PublicElementList" eSuperTypes="#//ElementList"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ProtectesElementList" eSuperTypes="#//ElementList"/>
+</ecore:EPackage>
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.genmodel
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.genmodel	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.genmodel	(revision 540)
@@ -0,0 +1,201 @@
+<?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.modelica.xtext/src-gen"
+    editDirectory="/org.modelica.xtext.edit/src" editorDirectory="/org.modelica.xtext.editor/src"
+    modelPluginID="org.modelica.xtext" forceOverwrite="true" modelName="ModelicaBase"
+    updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    complianceLevel="5.0" copyrightFields="false" editPluginID="org.modelica.xtext.edit"
+    editorPluginID="org.modelica.xtext.editor">
+  <genPackages prefix="ModelicaBase" basePackage="org.modelica.xtext" disposableProviderFactory="true"
+      ecorePackage="ModelicaBase.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="ModelicaBase.ecore#//ClassType">
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/CLASS"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/MODEL"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/RECORD"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/BLOCK"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/CONNECTOR"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/TYPE"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/PACKAGE"/>
+      <genEnumLiterals ecoreEnumLiteral="ModelicaBase.ecore#//ClassType/FUNCTION"/>
+    </genEnums>
+    <genClasses ecoreClass="ModelicaBase.ecore#//StorageUnit">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//StorageUnit/classDefinition"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//EntityDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//EntityDefinition/name"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ClassDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassDefinition/encapsulated"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassDefinition/partial"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassDefinition/expandable"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassDefinition/classType"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassDefinition/comment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/modification"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/elemList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/initialEquationClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/initialAlgorithmClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/equationClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/algorithmClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassDefinition/extClause"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//PartialDerivative">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//PartialDerivative/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ClassModification">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassModification/classType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassModification/typeSpecifier"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassModification/modification"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassModification/comment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassModification/arguments"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ClassOverloading">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ClassOverloading/classType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ClassOverloading/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//Enumeration">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//Enumeration/classType"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//Enumeration/ident"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//Enumeration/enumComments"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//Enumeration/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ExternalClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ExternalClause/languageSpecification"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ExternalClause/annotation"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ExternalClause/extAnnotation"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ElementList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementList/elements"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementList/annotations"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ClassElement"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ReplaceableElementClause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ReplaceableElementClause/entity"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ReplaceableElementClause/constrain"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ImportClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ImportClause/asName"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ImportClause/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ImportClause/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ExtendsClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ExtendsClause/baseClass"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ExtendsClause/modification"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ExtendsClause/annotation"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ConstrainingClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ConstrainingClause/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConstrainingClause/modification"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConstrainingClause/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ComponentClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ComponentClause/typePrefix"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ComponentClause/typeSpecifier"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ComponentClause/declarations"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//TypeSpecifier">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//TypeSpecifier/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//TypeSpecifier/subscripts"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ComponentDeclaration">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ComponentDeclaration/subscripts"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ComponentDeclaration/modification"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ComponentDeclaration/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ComponentDeclaration/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//Modification">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//Modification/expression"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//SimpleModification"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//argument"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ElementModification">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ElementModification/componetRef"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementModification/modification"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ElementModification/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ElementRedeclaration"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ElementReplaceableClause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementReplaceableClause/element"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementReplaceableClause/constraint"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ElementComponentClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ElementComponentClause/typePrefix"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementComponentClause/typeSpecifier"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ElementComponentClause/subscripts"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementComponentClause/modification"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ElementComponentClause/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//EquationClause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//EquationClause/equationRules"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//EquationClause/annotations"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//algorithm_clause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//algorithm_clause/algorithmRules"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//algorithm_clause/annotations"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//initial_equation_rule_clause"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//initial_algorithm_clause"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//equation_rule">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//equation_rule/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//algorithm">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//algorithm/comment"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ConditionalEquationRule">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConditionalEquationRule/thenEquationClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConditionalEquationRule/elseifClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConditionalEquationRule/elseEquationClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ConditionAlgorithmRule">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ConditionAlgorithmRule/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConditionAlgorithmRule/thenAlgorithmClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConditionAlgorithmRule/elseifClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ConditionAlgorithmRule/elseAlgotithmClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ForEquationClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ForEquationClause/forIndices"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ForEquationClause/equationClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ForAlgorithmClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//ForAlgorithmClause/forIndices"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//ForAlgorithmClause/algorithmClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//WhileClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//WhileClause/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//WhileClause/algorithmClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//when_clause_e">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//when_clause_e/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//when_clause_e/thenEquationClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//when_clause_e/elseWhenClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//else_when_e">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//else_when_e/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//else_when_e/thenEquationClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//when_clause_a">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//when_clause_a/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//when_clause_a/thenAlgorithmClauses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//when_clause_a/elseWhenClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//else_when_a">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//else_when_a/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//else_when_a/thenAlgorithmClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//equation_rule_elseif">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//equation_rule_elseif/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//equation_rule_elseif/thenEquationClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//algorithm_elseif">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//algorithm_elseif/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//algorithm_elseif/thenAlgorithmClauses"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//Comment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ModelicaBase.ecore#//Comment/string"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ModelicaBase.ecore#//Comment/annotation"/>
+    </genClasses>
+    <genClasses ecoreClass="ModelicaBase.ecore#//Annotation"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//PublicElementList"/>
+    <genClasses ecoreClass="ModelicaBase.ecore#//ProtectesElementList"/>
+  </genPackages>
+</genmodel:GenModel>
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.xmi
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.xmi	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBase.xmi	(revision 540)
@@ -0,0 +1,2026 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI 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" xmlns:xtext="http://www.eclipse.org/2008/Xtext">
+  <xtext:Grammar name="org.modelica.xtext.ModelicaBase" usedGrammars="/1">
+    <metamodelDeclarations xsi:type="xtext:GeneratedMetamodel" name="modelicaBase">
+      <ePackage href="http://www.modelica.org/xtext/ModelicaBase#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:ParserRule" name="StorageUnit">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//StorageUnit"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value="within"/>
+          <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.71"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="final"/>
+          <tokens xsi:type="xtext:Assignment" feature="classDefinition" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value=";"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="EntityDefinition">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//EntityDefinition"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ClassDefinition">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ClassDefinition"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="encapsulated" operator="?=">
+          <terminal xsi:type="xtext:Keyword" value="encapsulated"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="partial" operator="?=">
+          <terminal xsi:type="xtext:Keyword" value="partial"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="expandable" operator="?=">
+          <terminal xsi:type="xtext:Keyword" value="expandable"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="classType" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+            </tokens>
+            <tokens xsi:type="xtext:Assignment" cardinality="?" feature="comment" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.86"/>
+            </tokens>
+          </groups>
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Keyword" value="extends"/>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+            <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.86"/>
+          </groups>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="elemList" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives" cardinality="*">
+          <groups xsi:type="xtext:Assignment" feature="elemList" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          </groups>
+          <groups xsi:type="xtext:Assignment" feature="initialEquationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.33"/>
+          </groups>
+          <groups xsi:type="xtext:Assignment" feature="initialAlgorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.34"/>
+          </groups>
+          <groups xsi:type="xtext:Assignment" feature="equationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.31"/>
+          </groups>
+          <groups xsi:type="xtext:Assignment" feature="algorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.32"/>
+          </groups>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="extClause" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="ClassType">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EEnum" href="http://www.modelica.org/xtext/ModelicaBase#//ClassType"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/CLASS"/>
+          <literal value="class"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/MODEL"/>
+          <literal value="model"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/RECORD"/>
+          <literal value="record"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/BLOCK"/>
+          <literal value="block"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/CONNECTOR"/>
+          <literal value="connector"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/TYPE"/>
+          <literal value="type"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/PACKAGE"/>
+          <literal value="package"/>
+        </groups>
+        <groups xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.modelica.org/xtext/ModelicaBase#//ClassType/FUNCTION"/>
+          <literal value="function"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="PartialDerivative">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//PartialDerivative"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="function"/>
+        <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+        <tokens xsi:type="xtext:Keyword" value="der"/>
+        <tokens xsi:type="xtext:Keyword" value="("/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+        <tokens xsi:type="xtext:Keyword" value=","/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+        <tokens xsi:type="xtext:Keyword" value=")"/>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ClassModification">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ClassModification"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="classType" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+        <tokens xsi:type="xtext:Assignment" feature="typeSpecifier" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.21"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ClassOverloading">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ClassOverloading"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="classType" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+        <tokens xsi:type="xtext:Keyword" value="overload"/>
+        <tokens xsi:type="xtext:Keyword" value="("/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+        <tokens xsi:type="xtext:Keyword" value=")"/>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Enumeration">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//Enumeration"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="classType" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+        <tokens xsi:type="xtext:Keyword" value="enumeration"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="ident" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+            </tokens>
+            <tokens xsi:type="xtext:Assignment" feature="enumComments" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+            </tokens>
+            <tokens xsi:type="xtext:Group" cardinality="*">
+              <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+              <tokens xsi:type="xtext:Assignment" feature="ident" operator="+=">
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+              </tokens>
+              <tokens xsi:type="xtext:Assignment" feature="enumComments" operator="+=">
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+              </tokens>
+            </tokens>
+          </groups>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.98"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ident_list">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="name_list">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Keyword" value=","/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="external_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ExternalClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="external"/>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="languageSpecification" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.11"/>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="annotation" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Assignment" feature="extAnnotation" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="external_function_call">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.73"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.81"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ElementList">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ElementList"/>
+      </type>
+      <alternatives xsi:type="xtext:Group" cardinality="*">
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:Assignment" feature="elements" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+          </groups>
+          <groups xsi:type="xtext:Assignment" feature="annotations" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+          </groups>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ElementList2">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ElementList"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="public"/>
+          <tokens xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.0">
+              <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//PublicElementList"/>
+            </type>
+          </tokens>
+          <tokens xsi:type="xtext:Group" cardinality="*">
+            <tokens xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:Assignment" feature="elements" operator="+=">
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+              </groups>
+              <groups xsi:type="xtext:Assignment" feature="annotations" operator="+=">
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+              </groups>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </tokens>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="protected"/>
+          <tokens xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.0">
+              <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ProtectesElementList"/>
+            </type>
+          </tokens>
+          <tokens xsi:type="xtext:Group" cardinality="*">
+            <tokens xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:Assignment" feature="elements" operator="+=">
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+              </groups>
+              <groups xsi:type="xtext:Assignment" feature="annotations" operator="+=">
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+              </groups>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </tokens>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ClassElement">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ClassElement"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="redeclare"/>
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="final"/>
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="inner"/>
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="outer"/>
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+              <groups xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
+            </groups>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+          </tokens>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ReplaceableElementClause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ReplaceableElementClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="replaceable"/>
+        <tokens xsi:type="xtext:Assignment" feature="entity" operator="=">
+          <terminal xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
+          </terminal>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="constrain" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="import_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ImportClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="import"/>
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="asName" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+            <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+            </tokens>
+          </groups>
+          <groups xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.72"/>
+          </groups>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="extends_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ExtendsClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="extends"/>
+        <tokens xsi:type="xtext:Assignment" feature="baseClass" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="annotation" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="constraining_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ConstrainingClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Keyword" value="extends"/>
+            <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+            </tokens>
+            <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+            </tokens>
+          </groups>
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Keyword" value="constrainedby"/>
+            <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+            </tokens>
+            <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+            </tokens>
+          </groups>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="component_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ComponentClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="typePrefix" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="typeSpecifier" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.21"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="declarations" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.22"/>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:Assignment" feature="declarations" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.22"/>
+          </tokens>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="type_prefix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Keyword" value="flow"/>
+          <groups xsi:type="xtext:Keyword" value="stream"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Keyword" value="discrete"/>
+          <groups xsi:type="xtext:Keyword" value="parameter"/>
+          <groups xsi:type="xtext:Keyword" value="constant"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Keyword" value="input"/>
+          <groups xsi:type="xtext:Keyword" value="output"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="type_specifier">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//TypeSpecifier"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="subscripts" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.83"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="component_declaration">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ComponentDeclaration"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="subscripts" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.83"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.23"/>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value="if"/>
+          <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+          </tokens>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="modification">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//Modification"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.24"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="SimpleModification">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//SimpleModification"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+          <tokens xsi:type="xtext:Assignment" feature="expression" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+          </tokens>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.96"/>
+          <tokens xsi:type="xtext:Assignment" feature="expression" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+          </tokens>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="class_modification">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ClassModification"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Assignment" feature="arguments" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.26"/>
+          </tokens>
+          <tokens xsi:type="xtext:Group" cardinality="*">
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+            <tokens xsi:type="xtext:Assignment" feature="arguments" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.26"/>
+            </tokens>
+          </tokens>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+          <tokens xsi:type="xtext:Assignment" feature="expression" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+          </tokens>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="argument">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//argument"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="each"/>
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="final"/>
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.27"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.29"/>
+          </tokens>
+        </groups>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.28"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ElementModification">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ElementModification"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="componetRef" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.73"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.23"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.86"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ElementRedeclaration">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ElementRedeclaration"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="redeclare"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="each"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="final"/>
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.30"/>
+          </groups>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.29"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ElementReplaceableClause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ElementReplaceableClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="replaceable"/>
+        <tokens xsi:type="xtext:Assignment" feature="element" operator="=">
+          <terminal xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.30"/>
+          </terminal>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="constraint" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ElementComponentClause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ElementComponentClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" feature="typePrefix" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="typeSpecifier" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.21"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="subscripts" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.83"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="modification" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.23"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="equation_rule_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//EquationClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="equation"/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="+">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="equationRules" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </groups>
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="annotations" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="algorithm_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//algorithm_clause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="algorithm"/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="+">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="algorithmRules" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.36"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </groups>
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Assignment" feature="annotations" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="initial_equation_rule_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//initial_equation_rule_clause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="initial"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.31"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="initial_algorithm_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//initial_algorithm_clause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="initial"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.32"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="equation_rule">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//equation_rule"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.38"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.39"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.41"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.50"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.44"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="algorithm">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//algorithm"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.37"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.40"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.42"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.43"/>
+          <groups xsi:type="xtext:RuleCall" rule="/0/@rules.46"/>
+          <groups xsi:type="xtext:Keyword" value="break"/>
+          <groups xsi:type="xtext:Keyword" value="return"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" feature="comment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.85"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="assign_clause_a">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.59"/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.96"/>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+          </groups>
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="equality_equation_rule">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.59"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="conditional_equation_rule_e">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ConditionalEquationRule"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="if"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenEquationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="*" feature="elseifClauses" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.48"/>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value="else"/>
+          <tokens xsi:type="xtext:Group" cardinality="*">
+            <tokens xsi:type="xtext:Assignment" feature="elseEquationClauses" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </tokens>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="if"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="conditional_equation_rule_a">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ConditionAlgorithmRule"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="if"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenAlgorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.36"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="*" feature="elseifClauses" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.49"/>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value="else"/>
+          <tokens xsi:type="xtext:Group" cardinality="*">
+            <tokens xsi:type="xtext:Assignment" feature="elseAlgotithmClauses" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.36"/>
+            </tokens>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+          </tokens>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="if"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="for_clause_e">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ForEquationClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="for"/>
+        <tokens xsi:type="xtext:Assignment" feature="forIndices" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.57"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="loop"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="equationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="for"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="for_clause_a">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//ForAlgorithmClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="for"/>
+        <tokens xsi:type="xtext:Assignment" feature="forIndices" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.57"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="loop"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="algorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.36"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="for"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="while_clause">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//WhileClause"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="while"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="loop"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="algorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.36"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="while"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="when_clause_e">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//when_clause_e"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="when"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenEquationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="*" feature="elseWhenClauses" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.45"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="when"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="else_when_e">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//else_when_e"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="elsewhen"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenEquationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="when_clause_a">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//when_clause_a"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="when"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenAlgorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="*" feature="elseWhenClauses" operator="+=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.47"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="end"/>
+        <tokens xsi:type="xtext:Keyword" value="when"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="else_when_a">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//else_when_a"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="elsewhen"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenAlgorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="equation_rule_elseif">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//equation_rule_elseif"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="elseif"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenEquationClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="algorithm_elseif">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//algorithm_elseif"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="elseif"/>
+        <tokens xsi:type="xtext:Assignment" feature="condition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Assignment" feature="thenAlgorithmClauses" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.35"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="connect_clause">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="connect"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.51"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.51"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="connector_ref">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.83"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.88"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.52"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="connector_ref_2">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.83"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.55"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.59"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="expression_or_empty">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="if_expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="if"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:RuleCall" cardinality="*" rule="/0/@rules.56"/>
+        <tokens xsi:type="xtext:Keyword" value="else"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="elseif_expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="elseif"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:Keyword" value="then"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="for_indices">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.58"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.58"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="for_index">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" value="in"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="simple_expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:RuleCall" rule="/0/@rules.60"/>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="simple_expr">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.61"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.98"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.61"/>
+          <tokens xsi:type="xtext:Group" cardinality="?">
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.98"/>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.61"/>
+          </tokens>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="logical_expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.62"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Keyword" value="or"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.62"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="logical_term">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.63"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Keyword" value="and"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.63"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="logical_factor">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="not"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.64"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="relation">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.65"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.108"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.109"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.111"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.112"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.113"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.110"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.65"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="arithmetic_expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.66"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.107"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.106"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.100"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.101"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.67"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="unary_arithmetic_expression">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.107"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.67"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.106"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.67"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.100"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.67"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.101"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.67"/>
+        </groups>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.67"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="term">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.68"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.105"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.115"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.102"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.103"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.68"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="factor">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.69"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.114"/>
+            <groups xsi:type="xtext:RuleCall" rule="/0/@rules.104"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.69"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="primary">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.117"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.116"/>
+        <groups xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        <groups xsi:type="xtext:Keyword" value="false"/>
+        <groups xsi:type="xtext:Keyword" value="true"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.70"/>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="der"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.74"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.81"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.91"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.81"/>
+          <tokens xsi:type="xtext:Group" cardinality="*">
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.99"/>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.81"/>
+          </tokens>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.92"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.93"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.76"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.94"/>
+        </groups>
+        <groups xsi:type="xtext:Keyword" value="end"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="component_reference__function_call">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.73"/>
+          <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.74"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="initial"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="name_path">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.88"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.71"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="name_path_star">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+          <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.102"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.88"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.72"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="component_reference">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.83"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.88"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.73"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="function_call">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.89"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.75"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.90"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="function_arguments">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.76"/>
+        <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.78"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="for_or_expression_list">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+            <tokens xsi:type="xtext:RuleCall" cardinality="?" rule="/0/@rules.77"/>
+          </groups>
+          <groups xsi:type="xtext:Group">
+            <tokens xsi:type="xtext:Keyword" value="for"/>
+            <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.57"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="for_or_expression_list2">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.77"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="named_arguments">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:RuleCall" rule="/0/@rules.79"/>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="named_arguments2">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.80"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.80"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="named_argument">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.118"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.95"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="expression_list">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:RuleCall" rule="/0/@rules.82"/>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="expression_list2">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.82"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="array_subscripts">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.91"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.84"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.97"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.84"/>
+        </tokens>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.92"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="subscript">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.53"/>
+        <groups xsi:type="xtext:RuleCall" rule="/0/@rules.98"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="comment">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//Comment"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="string" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.86"/>
+        </tokens>
+        <tokens xsi:type="xtext:Assignment" cardinality="?" feature="annotation" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.87"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="string_comment">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        <tokens xsi:type="xtext:Group" cardinality="*">
+          <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.107"/>
+          <tokens xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="annotation">
+      <type metamodel="/0/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EClass" href="http://www.modelica.org/xtext/ModelicaBase#//Annotation"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="annotation"/>
+        <tokens xsi:type="xtext:RuleCall" rule="/0/@rules.25"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="DOT">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="."/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="LPAR">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="("/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="RPAR">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=")"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="LBRACK">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="["/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="RBRACK">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="]"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="LBRACE">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="{"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="RBRACE">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="}"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="EQUALS">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="="/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ASSIGN">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=":="/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="COMMA">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=","/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="COLON">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=":"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SEMICOLON">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=";"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="PLUS_EW">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=".+"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="MINUS_EW">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=".-"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="STAR_EW">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=".*"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SLASH_EW">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value="./"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="POWER_EW">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Keyword" value=".^"/>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="STAR">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="*"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="MINUS">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="-"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="PLUS">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="+"/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Keyword" value="."/>
+          <groups xsi:type="xtext:Keyword" value="&amp;"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="LESS">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="&lt;"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="LESSEQ">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="&lt;="/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="LESSGT">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="!="/>
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="&lt;>"/>
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="GREATER">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value=">"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="GREATEREQ">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value=">="/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="EQEQ">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="=="/>
+        <tokens xsi:type="xtext:Alternatives" cardinality="?">
+          <groups xsi:type="xtext:Keyword" value="."/>
+          <groups xsi:type="xtext:Keyword" value="&amp;"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="POWER">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="^"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SLASH">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="/"/>
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="."/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="UNSIGNED_REAL">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:CharacterRange" cardinality="+">
+            <left value="0"/>
+            <right value="9"/>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value="."/>
+          <tokens xsi:type="xtext:CharacterRange" cardinality="*">
+            <left value="0"/>
+            <right value="9"/>
+          </tokens>
+          <tokens xsi:type="xtext:Group" cardinality="?">
+            <tokens xsi:type="xtext:Alternatives">
+              <groups xsi:type="xtext:Keyword" value="E"/>
+              <groups xsi:type="xtext:Keyword" value="e"/>
+            </tokens>
+            <tokens xsi:type="xtext:Alternatives" cardinality="?">
+              <groups xsi:type="xtext:Keyword" value="+"/>
+              <groups xsi:type="xtext:Keyword" value="-"/>
+            </tokens>
+            <tokens xsi:type="xtext:CharacterRange" cardinality="+">
+              <left value="0"/>
+              <right value="9"/>
+            </tokens>
+          </tokens>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:CharacterRange" cardinality="+">
+            <left value="0"/>
+            <right value="9"/>
+          </tokens>
+          <tokens xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:Keyword" value="E"/>
+            <groups xsi:type="xtext:Keyword" value="e"/>
+          </tokens>
+          <tokens xsi:type="xtext:Alternatives" cardinality="?">
+            <groups xsi:type="xtext:Keyword" value="+"/>
+            <groups xsi:type="xtext:Keyword" value="-"/>
+          </tokens>
+          <tokens xsi:type="xtext:CharacterRange" cardinality="+">
+            <left value="0"/>
+            <right value="9"/>
+          </tokens>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="UNSIGNED_INTEGER">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:CharacterRange" cardinality="+">
+        <left value="0"/>
+        <right value="9"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="IDENT">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </groups>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </groups>
+          <groups xsi:type="xtext:Keyword" value="_"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives" cardinality="*">
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </groups>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </groups>
+          <groups xsi:type="xtext:Keyword" value="_"/>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="0"/>
+            <right value="9"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+  </xtext:Grammar>
+  <xtext:Grammar name="org.eclipse.xtext.common.Terminals" definesHiddenTokens="true" hiddenTokens="/1/@rules.5 /1/@rules.3 /1/@rules.4">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:TerminalRule" name="ID">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" cardinality="?" value="^"/>
+        <tokens xsi:type="xtext:Alternatives">
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </groups>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </groups>
+          <groups xsi:type="xtext:Keyword" value="_"/>
+        </tokens>
+        <tokens xsi:type="xtext:Alternatives" cardinality="*">
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </groups>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </groups>
+          <groups xsi:type="xtext:Keyword" value="_"/>
+          <groups xsi:type="xtext:CharacterRange">
+            <left value="0"/>
+            <right value="9"/>
+          </groups>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="INT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+      </type>
+      <alternatives xsi:type="xtext:CharacterRange" cardinality="+">
+        <left value="0"/>
+        <right value="9"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="STRING">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="&quot;"/>
+          <tokens xsi:type="xtext:Alternatives" cardinality="*">
+            <groups xsi:type="xtext:Group">
+              <tokens xsi:type="xtext:Keyword" value="\"/>
+              <tokens xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="b"/>
+                <groups xsi:type="xtext:Keyword" value="t"/>
+                <groups xsi:type="xtext:Keyword" value="n"/>
+                <groups xsi:type="xtext:Keyword" value="f"/>
+                <groups xsi:type="xtext:Keyword" value="r"/>
+                <groups xsi:type="xtext:Keyword" value="&quot;"/>
+                <groups xsi:type="xtext:Keyword" value="'"/>
+                <groups xsi:type="xtext:Keyword" value="\"/>
+              </tokens>
+            </groups>
+            <groups xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="\"/>
+                <groups xsi:type="xtext:Keyword" value="&quot;"/>
+              </terminal>
+            </groups>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value="&quot;"/>
+        </groups>
+        <groups xsi:type="xtext:Group">
+          <tokens xsi:type="xtext:Keyword" value="'"/>
+          <tokens xsi:type="xtext:Alternatives" cardinality="*">
+            <groups xsi:type="xtext:Group">
+              <tokens xsi:type="xtext:Keyword" value="\"/>
+              <tokens xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="b"/>
+                <groups xsi:type="xtext:Keyword" value="t"/>
+                <groups xsi:type="xtext:Keyword" value="n"/>
+                <groups xsi:type="xtext:Keyword" value="f"/>
+                <groups xsi:type="xtext:Keyword" value="r"/>
+                <groups xsi:type="xtext:Keyword" value="&quot;"/>
+                <groups xsi:type="xtext:Keyword" value="'"/>
+                <groups xsi:type="xtext:Keyword" value="\"/>
+              </tokens>
+            </groups>
+            <groups xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <groups xsi:type="xtext:Keyword" value="\"/>
+                <groups xsi:type="xtext:Keyword" value="'"/>
+              </terminal>
+            </groups>
+          </tokens>
+          <tokens xsi:type="xtext:Keyword" value="'"/>
+        </groups>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ML_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="/*"/>
+        <tokens xsi:type="xtext:UntilToken">
+          <terminal xsi:type="xtext:Keyword" value="*/"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SL_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <tokens xsi:type="xtext:Keyword" value="//"/>
+        <tokens xsi:type="xtext:NegatedToken" cardinality="*">
+          <terminal xsi:type="xtext:Alternatives">
+            <groups xsi:type="xtext:Keyword" value="&#xA;"/>
+            <groups xsi:type="xtext:Keyword" value="&#xD;"/>
+          </terminal>
+        </tokens>
+        <tokens xsi:type="xtext:Group" cardinality="?">
+          <tokens xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
+          <tokens xsi:type="xtext:Keyword" value="&#xA;"/>
+        </tokens>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="WS">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives" cardinality="+">
+        <groups xsi:type="xtext:Keyword" value=" "/>
+        <groups xsi:type="xtext:Keyword" value="&#x9;"/>
+        <groups xsi:type="xtext:Keyword" value="&#xD;"/>
+        <groups xsi:type="xtext:Keyword" value="&#xA;"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ANY_OTHER">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Wildcard"/>
+    </rules>
+  </xtext:Grammar>
+</xmi:XMI>
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBaseStandaloneSetup.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBaseStandaloneSetup.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/ModelicaBaseStandaloneSetup.java	(revision 540)
@@ -0,0 +1,44 @@
+package org.modelica.xtext;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.ISetup;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Generated from StandaloneSetup.xpt!
+ */
+public class ModelicaBaseStandaloneSetup implements ISetup {
+
+	public static void doSetup() {
+		new ModelicaBaseStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+
+	public Injector createInjectorAndDoEMFRegistration() {
+		org.eclipse.xtext.common.TerminalsStandaloneSetup.doSetup();
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new org.modelica.xtext.ModelicaBaseRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+	if (!EPackage.Registry.INSTANCE.containsKey("http://www.modelica.org/xtext/ModelicaBase")) {
+		EPackage.Registry.INSTANCE.put("http://www.modelica.org/xtext/ModelicaBase", org.modelica.xtext.modelicaBase.ModelicaBasePackage.eINSTANCE);
+	}
+
+		org.eclipse.xtext.resource.IResourceFactory resourceFactory = injector.getInstance(org.eclipse.xtext.resource.IResourceFactory.class);
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("mo", resourceFactory);
+		
+
+	//TODO registration of EValidators should be added here, too
+
+
+	}
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Annotation.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Annotation.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Annotation.java	(revision 540)
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Annotation</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getAnnotation()
+ * @model
+ * @generated
+ */
+public interface Annotation extends EObject
+{
+} // Annotation
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassDefinition.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassDefinition.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassDefinition.java	(revision 540)
@@ -0,0 +1,304 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Class Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#isEncapsulated <em>Encapsulated</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#isPartial <em>Partial</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#isExpandable <em>Expandable</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getComment <em>Comment</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getElemList <em>Elem List</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getInitialEquationClauses <em>Initial Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getInitialAlgorithmClauses <em>Initial Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getEquationClauses <em>Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getAlgorithmClauses <em>Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassDefinition#getExtClause <em>Ext Clause</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition()
+ * @model
+ * @generated
+ */
+public interface ClassDefinition extends EntityDefinition, ClassElement, ElementRedeclaration
+{
+  /**
+   * Returns the value of the '<em><b>Encapsulated</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Encapsulated</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Encapsulated</em>' attribute.
+   * @see #setEncapsulated(boolean)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_Encapsulated()
+   * @model
+   * @generated
+   */
+  boolean isEncapsulated();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#isEncapsulated <em>Encapsulated</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Encapsulated</em>' attribute.
+   * @see #isEncapsulated()
+   * @generated
+   */
+  void setEncapsulated(boolean value);
+
+  /**
+   * Returns the value of the '<em><b>Partial</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Partial</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Partial</em>' attribute.
+   * @see #setPartial(boolean)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_Partial()
+   * @model
+   * @generated
+   */
+  boolean isPartial();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#isPartial <em>Partial</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Partial</em>' attribute.
+   * @see #isPartial()
+   * @generated
+   */
+  void setPartial(boolean value);
+
+  /**
+   * Returns the value of the '<em><b>Expandable</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Expandable</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Expandable</em>' attribute.
+   * @see #setExpandable(boolean)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_Expandable()
+   * @model
+   * @generated
+   */
+  boolean isExpandable();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#isExpandable <em>Expandable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Expandable</em>' attribute.
+   * @see #isExpandable()
+   * @generated
+   */
+  void setExpandable(boolean value);
+
+  /**
+   * Returns the value of the '<em><b>Class Type</b></em>' attribute.
+   * The literals are from the enumeration {@link org.modelica.xtext.modelicaBase.ClassType}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Class 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>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #setClassType(ClassType)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_ClassType()
+   * @model
+   * @generated
+   */
+  ClassType getClassType();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getClassType <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #getClassType()
+   * @generated
+   */
+  void setClassType(ClassType value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Comment</em>' attribute.
+   * @see #setComment(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_Comment()
+   * @model
+   * @generated
+   */
+  String getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getComment <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' attribute.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(String value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(ClassModification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  ClassModification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(ClassModification value);
+
+  /**
+   * Returns the value of the '<em><b>Elem List</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.ElementList}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Elem List</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>Elem List</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_ElemList()
+   * @model containment="true"
+   * @generated
+   */
+  EList<ElementList> getElemList();
+
+  /**
+   * Returns the value of the '<em><b>Initial Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.initial_equation_rule_clause}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Initial Equation Clauses</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>Initial Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_InitialEquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<initial_equation_rule_clause> getInitialEquationClauses();
+
+  /**
+   * Returns the value of the '<em><b>Initial Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.initial_algorithm_clause}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Initial Algorithm Clauses</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>Initial Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_InitialAlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<initial_algorithm_clause> getInitialAlgorithmClauses();
+
+  /**
+   * Returns the value of the '<em><b>Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.EquationClause}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Equation Clauses</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>Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_EquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<EquationClause> getEquationClauses();
+
+  /**
+   * Returns the value of the '<em><b>Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm_clause}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Algorithm Clauses</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>Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_AlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm_clause> getAlgorithmClauses();
+
+  /**
+   * Returns the value of the '<em><b>Ext Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ext Clause</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>Ext Clause</em>' containment reference.
+   * @see #setExtClause(ExternalClause)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassDefinition_ExtClause()
+   * @model containment="true"
+   * @generated
+   */
+  ExternalClause getExtClause();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getExtClause <em>Ext Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ext Clause</em>' containment reference.
+   * @see #getExtClause()
+   * @generated
+   */
+  void setExtClause(ExternalClause value);
+
+} // ClassDefinition
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassElement.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassElement.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassElement.java	(revision 540)
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Class Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassElement()
+ * @model
+ * @generated
+ */
+public interface ClassElement extends EObject
+{
+} // ClassElement
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassModification.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassModification.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassModification.java	(revision 540)
@@ -0,0 +1,155 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Class Modification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassModification#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassModification#getTypeSpecifier <em>Type Specifier</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassModification#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassModification#getComment <em>Comment</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassModification#getArguments <em>Arguments</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassModification()
+ * @model
+ * @generated
+ */
+public interface ClassModification extends EntityDefinition, Modification, Annotation
+{
+  /**
+   * Returns the value of the '<em><b>Class Type</b></em>' attribute.
+   * The literals are from the enumeration {@link org.modelica.xtext.modelicaBase.ClassType}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Class 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>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #setClassType(ClassType)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassModification_ClassType()
+   * @model
+   * @generated
+   */
+  ClassType getClassType();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassModification#getClassType <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #getClassType()
+   * @generated
+   */
+  void setClassType(ClassType value);
+
+  /**
+   * Returns the value of the '<em><b>Type Specifier</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Specifier</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>Type Specifier</em>' containment reference.
+   * @see #setTypeSpecifier(TypeSpecifier)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassModification_TypeSpecifier()
+   * @model containment="true"
+   * @generated
+   */
+  TypeSpecifier getTypeSpecifier();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassModification#getTypeSpecifier <em>Type Specifier</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type Specifier</em>' containment reference.
+   * @see #getTypeSpecifier()
+   * @generated
+   */
+  void setTypeSpecifier(TypeSpecifier value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(ClassModification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassModification_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  ClassModification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassModification#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(ClassModification value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassModification_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassModification#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+  /**
+   * Returns the value of the '<em><b>Arguments</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.argument}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Arguments</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>Arguments</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassModification_Arguments()
+   * @model containment="true"
+   * @generated
+   */
+  EList<argument> getArguments();
+
+} // ClassModification
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassOverloading.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassOverloading.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassOverloading.java	(revision 540)
@@ -0,0 +1,83 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Class Overloading</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassOverloading#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ClassOverloading#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassOverloading()
+ * @model
+ * @generated
+ */
+public interface ClassOverloading extends EntityDefinition
+{
+  /**
+   * Returns the value of the '<em><b>Class Type</b></em>' attribute.
+   * The literals are from the enumeration {@link org.modelica.xtext.modelicaBase.ClassType}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Class 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>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #setClassType(ClassType)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassOverloading_ClassType()
+   * @model
+   * @generated
+   */
+  ClassType getClassType();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassOverloading#getClassType <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #getClassType()
+   * @generated
+   */
+  void setClassType(ClassType value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassOverloading_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ClassOverloading#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // ClassOverloading
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassType.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassType.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ClassType.java	(revision 540)
@@ -0,0 +1,388 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+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>Class Type</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getClassType()
+ * @model
+ * @generated
+ */
+public enum ClassType implements Enumerator
+{
+  /**
+   * The '<em><b>CLASS</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #CLASS_VALUE
+   * @generated
+   * @ordered
+   */
+  CLASS(0, "CLASS", "class"),
+
+  /**
+   * The '<em><b>MODEL</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #MODEL_VALUE
+   * @generated
+   * @ordered
+   */
+  MODEL(1, "MODEL", "model"),
+
+  /**
+   * The '<em><b>RECORD</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #RECORD_VALUE
+   * @generated
+   * @ordered
+   */
+  RECORD(2, "RECORD", "record"),
+
+  /**
+   * The '<em><b>BLOCK</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #BLOCK_VALUE
+   * @generated
+   * @ordered
+   */
+  BLOCK(3, "BLOCK", "block"),
+
+  /**
+   * The '<em><b>CONNECTOR</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #CONNECTOR_VALUE
+   * @generated
+   * @ordered
+   */
+  CONNECTOR(4, "CONNECTOR", "connector"),
+
+  /**
+   * The '<em><b>TYPE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #TYPE_VALUE
+   * @generated
+   * @ordered
+   */
+  TYPE(5, "TYPE", "type"),
+
+  /**
+   * The '<em><b>PACKAGE</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #PACKAGE_VALUE
+   * @generated
+   * @ordered
+   */
+  PACKAGE(6, "PACKAGE", "package"),
+
+  /**
+   * The '<em><b>FUNCTION</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #FUNCTION_VALUE
+   * @generated
+   * @ordered
+   */
+  FUNCTION(7, "FUNCTION", "function");
+
+  /**
+   * The '<em><b>CLASS</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>CLASS</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #CLASS
+   * @model literal="class"
+   * @generated
+   * @ordered
+   */
+  public static final int CLASS_VALUE = 0;
+
+  /**
+   * The '<em><b>MODEL</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>MODEL</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #MODEL
+   * @model literal="model"
+   * @generated
+   * @ordered
+   */
+  public static final int MODEL_VALUE = 1;
+
+  /**
+   * The '<em><b>RECORD</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>RECORD</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #RECORD
+   * @model literal="record"
+   * @generated
+   * @ordered
+   */
+  public static final int RECORD_VALUE = 2;
+
+  /**
+   * The '<em><b>BLOCK</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>BLOCK</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #BLOCK
+   * @model literal="block"
+   * @generated
+   * @ordered
+   */
+  public static final int BLOCK_VALUE = 3;
+
+  /**
+   * The '<em><b>CONNECTOR</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>CONNECTOR</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #CONNECTOR
+   * @model literal="connector"
+   * @generated
+   * @ordered
+   */
+  public static final int CONNECTOR_VALUE = 4;
+
+  /**
+   * The '<em><b>TYPE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>TYPE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #TYPE
+   * @model literal="type"
+   * @generated
+   * @ordered
+   */
+  public static final int TYPE_VALUE = 5;
+
+  /**
+   * The '<em><b>PACKAGE</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>PACKAGE</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #PACKAGE
+   * @model literal="package"
+   * @generated
+   * @ordered
+   */
+  public static final int PACKAGE_VALUE = 6;
+
+  /**
+   * The '<em><b>FUNCTION</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>FUNCTION</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #FUNCTION
+   * @model literal="function"
+   * @generated
+   * @ordered
+   */
+  public static final int FUNCTION_VALUE = 7;
+
+  /**
+   * An array of all the '<em><b>Class Type</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final ClassType[] VALUES_ARRAY =
+    new ClassType[]
+    {
+      CLASS,
+      MODEL,
+      RECORD,
+      BLOCK,
+      CONNECTOR,
+      TYPE,
+      PACKAGE,
+      FUNCTION,
+    };
+
+  /**
+   * A public read-only list of all the '<em><b>Class Type</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<ClassType> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Class Type</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ClassType get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      ClassType result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Class Type</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ClassType getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      ClassType result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Class Type</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ClassType get(int value)
+  {
+    switch (value)
+    {
+      case CLASS_VALUE: return CLASS;
+      case MODEL_VALUE: return MODEL;
+      case RECORD_VALUE: return RECORD;
+      case BLOCK_VALUE: return BLOCK;
+      case CONNECTOR_VALUE: return CONNECTOR;
+      case TYPE_VALUE: return TYPE;
+      case PACKAGE_VALUE: return PACKAGE;
+      case FUNCTION_VALUE: return FUNCTION;
+    }
+    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 ClassType(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;
+  }
+  
+} //ClassType
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Comment.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Comment.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Comment.java	(revision 540)
@@ -0,0 +1,81 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Comment</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Comment#getString <em>String</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Comment#getAnnotation <em>Annotation</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComment()
+ * @model
+ * @generated
+ */
+public interface Comment extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>String</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>String</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>String</em>' attribute.
+   * @see #setString(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComment_String()
+   * @model
+   * @generated
+   */
+  String getString();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.Comment#getString <em>String</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>String</em>' attribute.
+   * @see #getString()
+   * @generated
+   */
+  void setString(String value);
+
+  /**
+   * Returns the value of the '<em><b>Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Annotation</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>Annotation</em>' containment reference.
+   * @see #setAnnotation(Annotation)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComment_Annotation()
+   * @model containment="true"
+   * @generated
+   */
+  Annotation getAnnotation();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.Comment#getAnnotation <em>Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Annotation</em>' containment reference.
+   * @see #getAnnotation()
+   * @generated
+   */
+  void setAnnotation(Annotation value);
+
+} // Comment
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ComponentClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ComponentClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ComponentClause.java	(revision 540)
@@ -0,0 +1,98 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Component Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentClause#getTypePrefix <em>Type Prefix</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentClause#getTypeSpecifier <em>Type Specifier</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentClause#getDeclarations <em>Declarations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentClause()
+ * @model
+ * @generated
+ */
+public interface ComponentClause extends ClassElement
+{
+  /**
+   * Returns the value of the '<em><b>Type Prefix</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Prefix</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 Prefix</em>' attribute.
+   * @see #setTypePrefix(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentClause_TypePrefix()
+   * @model
+   * @generated
+   */
+  String getTypePrefix();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ComponentClause#getTypePrefix <em>Type Prefix</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type Prefix</em>' attribute.
+   * @see #getTypePrefix()
+   * @generated
+   */
+  void setTypePrefix(String value);
+
+  /**
+   * Returns the value of the '<em><b>Type Specifier</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Specifier</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>Type Specifier</em>' containment reference.
+   * @see #setTypeSpecifier(TypeSpecifier)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentClause_TypeSpecifier()
+   * @model containment="true"
+   * @generated
+   */
+  TypeSpecifier getTypeSpecifier();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ComponentClause#getTypeSpecifier <em>Type Specifier</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type Specifier</em>' containment reference.
+   * @see #getTypeSpecifier()
+   * @generated
+   */
+  void setTypeSpecifier(TypeSpecifier value);
+
+  /**
+   * Returns the value of the '<em><b>Declarations</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.ComponentDeclaration}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Declarations</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>Declarations</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentClause_Declarations()
+   * @model containment="true"
+   * @generated
+   */
+  EList<ComponentDeclaration> getDeclarations();
+
+} // ComponentClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ComponentDeclaration.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ComponentDeclaration.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ComponentDeclaration.java	(revision 540)
@@ -0,0 +1,135 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Component Declaration</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getSubscripts <em>Subscripts</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentDeclaration()
+ * @model
+ * @generated
+ */
+public interface ComponentDeclaration extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Subscripts</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Subscripts</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Subscripts</em>' attribute.
+   * @see #setSubscripts(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentDeclaration_Subscripts()
+   * @model
+   * @generated
+   */
+  String getSubscripts();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getSubscripts <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Subscripts</em>' attribute.
+   * @see #getSubscripts()
+   * @generated
+   */
+  void setSubscripts(String value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(Modification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentDeclaration_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  Modification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(Modification value);
+
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentDeclaration_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getComponentDeclaration_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // ComponentDeclaration
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConditionAlgorithmRule.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConditionAlgorithmRule.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConditionAlgorithmRule.java	(revision 540)
@@ -0,0 +1,105 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Condition Algorithm Rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getElseifClauses <em>Elseif Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getElseAlgotithmClauses <em>Else Algotithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionAlgorithmRule()
+ * @model
+ * @generated
+ */
+public interface ConditionAlgorithmRule extends algorithm
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionAlgorithmRule_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Algorithm Clauses</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>Then Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionAlgorithmRule_ThenAlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm> getThenAlgorithmClauses();
+
+  /**
+   * Returns the value of the '<em><b>Elseif Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm_elseif}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Elseif Clauses</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>Elseif Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionAlgorithmRule_ElseifClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm_elseif> getElseifClauses();
+
+  /**
+   * Returns the value of the '<em><b>Else Algotithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Else Algotithm Clauses</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>Else Algotithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionAlgorithmRule_ElseAlgotithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm> getElseAlgotithmClauses();
+
+} // ConditionAlgorithmRule
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConditionalEquationRule.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConditionalEquationRule.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConditionalEquationRule.java	(revision 540)
@@ -0,0 +1,78 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Conditional Equation Rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule#getElseifClauses <em>Elseif Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule#getElseEquationClauses <em>Else Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionalEquationRule()
+ * @model
+ * @generated
+ */
+public interface ConditionalEquationRule extends equation_rule
+{
+  /**
+   * Returns the value of the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Equation Clauses</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>Then Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionalEquationRule_ThenEquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenEquationClauses();
+
+  /**
+   * Returns the value of the '<em><b>Elseif Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule_elseif}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Elseif Clauses</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>Elseif Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionalEquationRule_ElseifClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule_elseif> getElseifClauses();
+
+  /**
+   * Returns the value of the '<em><b>Else Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Else Equation Clauses</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>Else Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConditionalEquationRule_ElseEquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getElseEquationClauses();
+
+} // ConditionalEquationRule
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConstrainingClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConstrainingClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ConstrainingClause.java	(revision 540)
@@ -0,0 +1,108 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Constraining Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getName <em>Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConstrainingClause()
+ * @model
+ * @generated
+ */
+public interface ConstrainingClause extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>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>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConstrainingClause_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(ClassModification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConstrainingClause_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  ClassModification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(ClassModification value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getConstrainingClause_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // ConstrainingClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementComponentClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementComponentClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementComponentClause.java	(revision 540)
@@ -0,0 +1,161 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element Component Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getTypePrefix <em>Type Prefix</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getTypeSpecifier <em>Type Specifier</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getSubscripts <em>Subscripts</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementComponentClause()
+ * @model
+ * @generated
+ */
+public interface ElementComponentClause extends ElementRedeclaration
+{
+  /**
+   * Returns the value of the '<em><b>Type Prefix</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Prefix</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 Prefix</em>' attribute.
+   * @see #setTypePrefix(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementComponentClause_TypePrefix()
+   * @model
+   * @generated
+   */
+  String getTypePrefix();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getTypePrefix <em>Type Prefix</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type Prefix</em>' attribute.
+   * @see #getTypePrefix()
+   * @generated
+   */
+  void setTypePrefix(String value);
+
+  /**
+   * Returns the value of the '<em><b>Type Specifier</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Specifier</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>Type Specifier</em>' containment reference.
+   * @see #setTypeSpecifier(TypeSpecifier)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementComponentClause_TypeSpecifier()
+   * @model containment="true"
+   * @generated
+   */
+  TypeSpecifier getTypeSpecifier();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getTypeSpecifier <em>Type Specifier</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type Specifier</em>' containment reference.
+   * @see #getTypeSpecifier()
+   * @generated
+   */
+  void setTypeSpecifier(TypeSpecifier value);
+
+  /**
+   * Returns the value of the '<em><b>Subscripts</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Subscripts</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Subscripts</em>' attribute.
+   * @see #setSubscripts(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementComponentClause_Subscripts()
+   * @model
+   * @generated
+   */
+  String getSubscripts();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getSubscripts <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Subscripts</em>' attribute.
+   * @see #getSubscripts()
+   * @generated
+   */
+  void setSubscripts(String value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(Modification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementComponentClause_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  Modification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(Modification value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementComponentClause_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // ElementComponentClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementList.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementList.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementList.java	(revision 540)
@@ -0,0 +1,63 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element List</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementList#getElements <em>Elements</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementList#getAnnotations <em>Annotations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementList()
+ * @model
+ * @generated
+ */
+public interface ElementList extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.ClassElement}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Elements</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>Elements</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementList_Elements()
+   * @model containment="true"
+   * @generated
+   */
+  EList<ClassElement> getElements();
+
+  /**
+   * Returns the value of the '<em><b>Annotations</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.Annotation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Annotations</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>Annotations</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementList_Annotations()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Annotation> getAnnotations();
+
+} // ElementList
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementModification.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementModification.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementModification.java	(revision 540)
@@ -0,0 +1,107 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element Modification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementModification#getComponetRef <em>Componet Ref</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementModification#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementModification#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementModification()
+ * @model
+ * @generated
+ */
+public interface ElementModification extends argument
+{
+  /**
+   * Returns the value of the '<em><b>Componet Ref</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Componet Ref</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Componet Ref</em>' attribute.
+   * @see #setComponetRef(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementModification_ComponetRef()
+   * @model
+   * @generated
+   */
+  String getComponetRef();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementModification#getComponetRef <em>Componet Ref</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Componet Ref</em>' attribute.
+   * @see #getComponetRef()
+   * @generated
+   */
+  void setComponetRef(String value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(Modification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementModification_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  Modification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementModification#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(Modification value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Comment</em>' attribute.
+   * @see #setComment(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementModification_Comment()
+   * @model
+   * @generated
+   */
+  String getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementModification#getComment <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' attribute.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(String value);
+
+} // ElementModification
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementRedeclaration.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementRedeclaration.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementRedeclaration.java	(revision 540)
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element Redeclaration</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementRedeclaration()
+ * @model
+ * @generated
+ */
+public interface ElementRedeclaration extends argument
+{
+} // ElementRedeclaration
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementReplaceableClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementReplaceableClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ElementReplaceableClause.java	(revision 540)
@@ -0,0 +1,80 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Element Replaceable Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause#getElement <em>Element</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause#getConstraint <em>Constraint</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementReplaceableClause()
+ * @model
+ * @generated
+ */
+public interface ElementReplaceableClause extends argument, ElementRedeclaration
+{
+  /**
+   * Returns the value of the '<em><b>Element</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Element</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>Element</em>' containment reference.
+   * @see #setElement(ElementRedeclaration)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementReplaceableClause_Element()
+   * @model containment="true"
+   * @generated
+   */
+  ElementRedeclaration getElement();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause#getElement <em>Element</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Element</em>' containment reference.
+   * @see #getElement()
+   * @generated
+   */
+  void setElement(ElementRedeclaration value);
+
+  /**
+   * Returns the value of the '<em><b>Constraint</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Constraint</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>Constraint</em>' containment reference.
+   * @see #setConstraint(ConstrainingClause)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getElementReplaceableClause_Constraint()
+   * @model containment="true"
+   * @generated
+   */
+  ConstrainingClause getConstraint();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause#getConstraint <em>Constraint</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Constraint</em>' containment reference.
+   * @see #getConstraint()
+   * @generated
+   */
+  void setConstraint(ConstrainingClause value);
+
+} // ElementReplaceableClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/EntityDefinition.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/EntityDefinition.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/EntityDefinition.java	(revision 540)
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Entity Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.EntityDefinition#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEntityDefinition()
+ * @model
+ * @generated
+ */
+public interface EntityDefinition extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>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>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEntityDefinition_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.EntityDefinition#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+} // EntityDefinition
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Enumeration.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Enumeration.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Enumeration.java	(revision 540)
@@ -0,0 +1,118 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Enumeration</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Enumeration#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Enumeration#getIdent <em>Ident</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Enumeration#getEnumComments <em>Enum Comments</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Enumeration#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEnumeration()
+ * @model
+ * @generated
+ */
+public interface Enumeration extends EntityDefinition
+{
+  /**
+   * Returns the value of the '<em><b>Class Type</b></em>' attribute.
+   * The literals are from the enumeration {@link org.modelica.xtext.modelicaBase.ClassType}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Class 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>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #setClassType(ClassType)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEnumeration_ClassType()
+   * @model
+   * @generated
+   */
+  ClassType getClassType();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.Enumeration#getClassType <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Class Type</em>' attribute.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see #getClassType()
+   * @generated
+   */
+  void setClassType(ClassType value);
+
+  /**
+   * Returns the value of the '<em><b>Ident</b></em>' attribute list.
+   * The list contents are of type {@link java.lang.String}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ident</em>' attribute list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ident</em>' attribute list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEnumeration_Ident()
+   * @model unique="false"
+   * @generated
+   */
+  EList<String> getIdent();
+
+  /**
+   * Returns the value of the '<em><b>Enum Comments</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.Comment}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Enum Comments</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>Enum Comments</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEnumeration_EnumComments()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Comment> getEnumComments();
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEnumeration_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.Enumeration#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // Enumeration
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/EquationClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/EquationClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/EquationClause.java	(revision 540)
@@ -0,0 +1,61 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Equation Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.EquationClause#getEquationRules <em>Equation Rules</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.EquationClause#getAnnotations <em>Annotations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEquationClause()
+ * @model
+ * @generated
+ */
+public interface EquationClause extends initial_equation_rule_clause
+{
+  /**
+   * Returns the value of the '<em><b>Equation Rules</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Equation 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>Equation Rules</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEquationClause_EquationRules()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getEquationRules();
+
+  /**
+   * Returns the value of the '<em><b>Annotations</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.Annotation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Annotations</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>Annotations</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getEquationClause_Annotations()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Annotation> getAnnotations();
+
+} // EquationClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ExtendsClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ExtendsClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ExtendsClause.java	(revision 540)
@@ -0,0 +1,107 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Extends Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ExtendsClause#getBaseClass <em>Base Class</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ExtendsClause#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ExtendsClause#getAnnotation <em>Annotation</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExtendsClause()
+ * @model
+ * @generated
+ */
+public interface ExtendsClause extends ClassElement
+{
+  /**
+   * Returns the value of the '<em><b>Base Class</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Base Class</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Base Class</em>' attribute.
+   * @see #setBaseClass(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExtendsClause_BaseClass()
+   * @model
+   * @generated
+   */
+  String getBaseClass();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ExtendsClause#getBaseClass <em>Base Class</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Base Class</em>' attribute.
+   * @see #getBaseClass()
+   * @generated
+   */
+  void setBaseClass(String value);
+
+  /**
+   * Returns the value of the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Modification</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>Modification</em>' containment reference.
+   * @see #setModification(ClassModification)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExtendsClause_Modification()
+   * @model containment="true"
+   * @generated
+   */
+  ClassModification getModification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ExtendsClause#getModification <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Modification</em>' containment reference.
+   * @see #getModification()
+   * @generated
+   */
+  void setModification(ClassModification value);
+
+  /**
+   * Returns the value of the '<em><b>Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Annotation</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>Annotation</em>' containment reference.
+   * @see #setAnnotation(Annotation)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExtendsClause_Annotation()
+   * @model containment="true"
+   * @generated
+   */
+  Annotation getAnnotation();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ExtendsClause#getAnnotation <em>Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Annotation</em>' containment reference.
+   * @see #getAnnotation()
+   * @generated
+   */
+  void setAnnotation(Annotation value);
+
+} // ExtendsClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ExternalClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ExternalClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ExternalClause.java	(revision 540)
@@ -0,0 +1,108 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>External Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ExternalClause#getLanguageSpecification <em>Language Specification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ExternalClause#getAnnotation <em>Annotation</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ExternalClause#getExtAnnotation <em>Ext Annotation</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExternalClause()
+ * @model
+ * @generated
+ */
+public interface ExternalClause extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Language Specification</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Language Specification</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Language Specification</em>' attribute.
+   * @see #setLanguageSpecification(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExternalClause_LanguageSpecification()
+   * @model
+   * @generated
+   */
+  String getLanguageSpecification();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ExternalClause#getLanguageSpecification <em>Language Specification</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Language Specification</em>' attribute.
+   * @see #getLanguageSpecification()
+   * @generated
+   */
+  void setLanguageSpecification(String value);
+
+  /**
+   * Returns the value of the '<em><b>Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Annotation</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>Annotation</em>' containment reference.
+   * @see #setAnnotation(Annotation)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExternalClause_Annotation()
+   * @model containment="true"
+   * @generated
+   */
+  Annotation getAnnotation();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ExternalClause#getAnnotation <em>Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Annotation</em>' containment reference.
+   * @see #getAnnotation()
+   * @generated
+   */
+  void setAnnotation(Annotation value);
+
+  /**
+   * Returns the value of the '<em><b>Ext Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ext Annotation</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>Ext Annotation</em>' containment reference.
+   * @see #setExtAnnotation(Annotation)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getExternalClause_ExtAnnotation()
+   * @model containment="true"
+   * @generated
+   */
+  Annotation getExtAnnotation();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ExternalClause#getExtAnnotation <em>Ext Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ext Annotation</em>' containment reference.
+   * @see #getExtAnnotation()
+   * @generated
+   */
+  void setExtAnnotation(Annotation value);
+
+} // ExternalClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ForAlgorithmClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ForAlgorithmClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ForAlgorithmClause.java	(revision 540)
@@ -0,0 +1,71 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>For Algorithm Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause#getForIndices <em>For Indices</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause#getAlgorithmClauses <em>Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getForAlgorithmClause()
+ * @model
+ * @generated
+ */
+public interface ForAlgorithmClause extends algorithm
+{
+  /**
+   * Returns the value of the '<em><b>For Indices</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>For Indices</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>For Indices</em>' attribute.
+   * @see #setForIndices(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getForAlgorithmClause_ForIndices()
+   * @model
+   * @generated
+   */
+  String getForIndices();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause#getForIndices <em>For Indices</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>For Indices</em>' attribute.
+   * @see #getForIndices()
+   * @generated
+   */
+  void setForIndices(String value);
+
+  /**
+   * Returns the value of the '<em><b>Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Algorithm Clauses</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>Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getForAlgorithmClause_AlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm> getAlgorithmClauses();
+
+} // ForAlgorithmClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ForEquationClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ForEquationClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ForEquationClause.java	(revision 540)
@@ -0,0 +1,71 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>For Equation Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ForEquationClause#getForIndices <em>For Indices</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ForEquationClause#getEquationClauses <em>Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getForEquationClause()
+ * @model
+ * @generated
+ */
+public interface ForEquationClause extends equation_rule
+{
+  /**
+   * Returns the value of the '<em><b>For Indices</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>For Indices</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>For Indices</em>' attribute.
+   * @see #setForIndices(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getForEquationClause_ForIndices()
+   * @model
+   * @generated
+   */
+  String getForIndices();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ForEquationClause#getForIndices <em>For Indices</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>For Indices</em>' attribute.
+   * @see #getForIndices()
+   * @generated
+   */
+  void setForIndices(String value);
+
+  /**
+   * Returns the value of the '<em><b>Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Equation Clauses</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>Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getForEquationClause_EquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getEquationClauses();
+
+} // ForEquationClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ImportClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ImportClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ImportClause.java	(revision 540)
@@ -0,0 +1,107 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Import Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ImportClause#getAsName <em>As Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ImportClause#getName <em>Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ImportClause#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getImportClause()
+ * @model
+ * @generated
+ */
+public interface ImportClause extends ClassElement
+{
+  /**
+   * Returns the value of the '<em><b>As Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>As 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>As Name</em>' attribute.
+   * @see #setAsName(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getImportClause_AsName()
+   * @model
+   * @generated
+   */
+  String getAsName();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ImportClause#getAsName <em>As Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>As Name</em>' attribute.
+   * @see #getAsName()
+   * @generated
+   */
+  void setAsName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>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>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getImportClause_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ImportClause#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getImportClause_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ImportClause#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // ImportClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ModelicaBaseFactory.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ModelicaBaseFactory.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ModelicaBaseFactory.java	(revision 540)
@@ -0,0 +1,442 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+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.modelica.xtext.modelicaBase.ModelicaBasePackage
+ * @generated
+ */
+public interface ModelicaBaseFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  ModelicaBaseFactory eINSTANCE = org.modelica.xtext.modelicaBase.impl.ModelicaBaseFactoryImpl.init();
+
+  /**
+   * Returns a new object of class '<em>Storage Unit</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Storage Unit</em>'.
+   * @generated
+   */
+  StorageUnit createStorageUnit();
+
+  /**
+   * Returns a new object of class '<em>Entity Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Entity Definition</em>'.
+   * @generated
+   */
+  EntityDefinition createEntityDefinition();
+
+  /**
+   * Returns a new object of class '<em>Class Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Class Definition</em>'.
+   * @generated
+   */
+  ClassDefinition createClassDefinition();
+
+  /**
+   * Returns a new object of class '<em>Partial Derivative</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Partial Derivative</em>'.
+   * @generated
+   */
+  PartialDerivative createPartialDerivative();
+
+  /**
+   * Returns a new object of class '<em>Class Modification</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Class Modification</em>'.
+   * @generated
+   */
+  ClassModification createClassModification();
+
+  /**
+   * Returns a new object of class '<em>Class Overloading</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Class Overloading</em>'.
+   * @generated
+   */
+  ClassOverloading createClassOverloading();
+
+  /**
+   * Returns a new object of class '<em>Enumeration</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Enumeration</em>'.
+   * @generated
+   */
+  Enumeration createEnumeration();
+
+  /**
+   * Returns a new object of class '<em>External Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>External Clause</em>'.
+   * @generated
+   */
+  ExternalClause createExternalClause();
+
+  /**
+   * Returns a new object of class '<em>Element List</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Element List</em>'.
+   * @generated
+   */
+  ElementList createElementList();
+
+  /**
+   * Returns a new object of class '<em>Class Element</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Class Element</em>'.
+   * @generated
+   */
+  ClassElement createClassElement();
+
+  /**
+   * Returns a new object of class '<em>Replaceable Element Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Replaceable Element Clause</em>'.
+   * @generated
+   */
+  ReplaceableElementClause createReplaceableElementClause();
+
+  /**
+   * Returns a new object of class '<em>Import Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Import Clause</em>'.
+   * @generated
+   */
+  ImportClause createImportClause();
+
+  /**
+   * Returns a new object of class '<em>Extends Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Extends Clause</em>'.
+   * @generated
+   */
+  ExtendsClause createExtendsClause();
+
+  /**
+   * Returns a new object of class '<em>Constraining Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Constraining Clause</em>'.
+   * @generated
+   */
+  ConstrainingClause createConstrainingClause();
+
+  /**
+   * Returns a new object of class '<em>Component Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Component Clause</em>'.
+   * @generated
+   */
+  ComponentClause createComponentClause();
+
+  /**
+   * Returns a new object of class '<em>Type Specifier</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Type Specifier</em>'.
+   * @generated
+   */
+  TypeSpecifier createTypeSpecifier();
+
+  /**
+   * Returns a new object of class '<em>Component Declaration</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Component Declaration</em>'.
+   * @generated
+   */
+  ComponentDeclaration createComponentDeclaration();
+
+  /**
+   * Returns a new object of class '<em>Modification</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Modification</em>'.
+   * @generated
+   */
+  Modification createModification();
+
+  /**
+   * Returns a new object of class '<em>Simple Modification</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Simple Modification</em>'.
+   * @generated
+   */
+  SimpleModification createSimpleModification();
+
+  /**
+   * Returns a new object of class '<em>argument</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>argument</em>'.
+   * @generated
+   */
+  argument createargument();
+
+  /**
+   * Returns a new object of class '<em>Element Modification</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Element Modification</em>'.
+   * @generated
+   */
+  ElementModification createElementModification();
+
+  /**
+   * Returns a new object of class '<em>Element Redeclaration</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Element Redeclaration</em>'.
+   * @generated
+   */
+  ElementRedeclaration createElementRedeclaration();
+
+  /**
+   * Returns a new object of class '<em>Element Replaceable Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Element Replaceable Clause</em>'.
+   * @generated
+   */
+  ElementReplaceableClause createElementReplaceableClause();
+
+  /**
+   * Returns a new object of class '<em>Element Component Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Element Component Clause</em>'.
+   * @generated
+   */
+  ElementComponentClause createElementComponentClause();
+
+  /**
+   * Returns a new object of class '<em>Equation Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Equation Clause</em>'.
+   * @generated
+   */
+  EquationClause createEquationClause();
+
+  /**
+   * Returns a new object of class '<em>algorithm clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>algorithm clause</em>'.
+   * @generated
+   */
+  algorithm_clause createalgorithm_clause();
+
+  /**
+   * Returns a new object of class '<em>initial equation rule clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>initial equation rule clause</em>'.
+   * @generated
+   */
+  initial_equation_rule_clause createinitial_equation_rule_clause();
+
+  /**
+   * Returns a new object of class '<em>initial algorithm clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>initial algorithm clause</em>'.
+   * @generated
+   */
+  initial_algorithm_clause createinitial_algorithm_clause();
+
+  /**
+   * Returns a new object of class '<em>equation rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>equation rule</em>'.
+   * @generated
+   */
+  equation_rule createequation_rule();
+
+  /**
+   * Returns a new object of class '<em>algorithm</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>algorithm</em>'.
+   * @generated
+   */
+  algorithm createalgorithm();
+
+  /**
+   * Returns a new object of class '<em>Conditional Equation Rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Conditional Equation Rule</em>'.
+   * @generated
+   */
+  ConditionalEquationRule createConditionalEquationRule();
+
+  /**
+   * Returns a new object of class '<em>Condition Algorithm Rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Condition Algorithm Rule</em>'.
+   * @generated
+   */
+  ConditionAlgorithmRule createConditionAlgorithmRule();
+
+  /**
+   * Returns a new object of class '<em>For Equation Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>For Equation Clause</em>'.
+   * @generated
+   */
+  ForEquationClause createForEquationClause();
+
+  /**
+   * Returns a new object of class '<em>For Algorithm Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>For Algorithm Clause</em>'.
+   * @generated
+   */
+  ForAlgorithmClause createForAlgorithmClause();
+
+  /**
+   * Returns a new object of class '<em>While Clause</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>While Clause</em>'.
+   * @generated
+   */
+  WhileClause createWhileClause();
+
+  /**
+   * Returns a new object of class '<em>when clause e</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>when clause e</em>'.
+   * @generated
+   */
+  when_clause_e createwhen_clause_e();
+
+  /**
+   * Returns a new object of class '<em>else when e</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>else when e</em>'.
+   * @generated
+   */
+  else_when_e createelse_when_e();
+
+  /**
+   * Returns a new object of class '<em>when clause a</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>when clause a</em>'.
+   * @generated
+   */
+  when_clause_a createwhen_clause_a();
+
+  /**
+   * Returns a new object of class '<em>else when a</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>else when a</em>'.
+   * @generated
+   */
+  else_when_a createelse_when_a();
+
+  /**
+   * Returns a new object of class '<em>equation rule elseif</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>equation rule elseif</em>'.
+   * @generated
+   */
+  equation_rule_elseif createequation_rule_elseif();
+
+  /**
+   * Returns a new object of class '<em>algorithm elseif</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>algorithm elseif</em>'.
+   * @generated
+   */
+  algorithm_elseif createalgorithm_elseif();
+
+  /**
+   * Returns a new object of class '<em>Comment</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Comment</em>'.
+   * @generated
+   */
+  Comment createComment();
+
+  /**
+   * Returns a new object of class '<em>Annotation</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Annotation</em>'.
+   * @generated
+   */
+  Annotation createAnnotation();
+
+  /**
+   * Returns a new object of class '<em>Public Element List</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Public Element List</em>'.
+   * @generated
+   */
+  PublicElementList createPublicElementList();
+
+  /**
+   * Returns a new object of class '<em>Protectes Element List</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Protectes Element List</em>'.
+   * @generated
+   */
+  ProtectesElementList createProtectesElementList();
+
+  /**
+   * Returns the package supported by this factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the package supported by this factory.
+   * @generated
+   */
+  ModelicaBasePackage getModelicaBasePackage();
+
+} //ModelicaBaseFactory
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ModelicaBasePackage.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ModelicaBasePackage.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ModelicaBasePackage.java	(revision 540)
@@ -0,0 +1,4752 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+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.modelica.xtext.modelicaBase.ModelicaBaseFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ModelicaBasePackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "modelicaBase";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://www.modelica.org/xtext/ModelicaBase";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "modelicaBase";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  ModelicaBasePackage eINSTANCE = org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.StorageUnitImpl <em>Storage Unit</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.StorageUnitImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getStorageUnit()
+   * @generated
+   */
+  int STORAGE_UNIT = 0;
+
+  /**
+   * The feature id for the '<em><b>Class Definition</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STORAGE_UNIT__CLASS_DEFINITION = 0;
+
+  /**
+   * The number of structural features of the '<em>Storage Unit</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STORAGE_UNIT_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.EntityDefinitionImpl <em>Entity Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.EntityDefinitionImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getEntityDefinition()
+   * @generated
+   */
+  int ENTITY_DEFINITION = 1;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENTITY_DEFINITION__NAME = 0;
+
+  /**
+   * The number of structural features of the '<em>Entity Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENTITY_DEFINITION_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl <em>Class Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassDefinition()
+   * @generated
+   */
+  int CLASS_DEFINITION = 2;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__NAME = ENTITY_DEFINITION__NAME;
+
+  /**
+   * The feature id for the '<em><b>Encapsulated</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__ENCAPSULATED = ENTITY_DEFINITION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Partial</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__PARTIAL = ENTITY_DEFINITION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Expandable</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__EXPANDABLE = ENTITY_DEFINITION_FEATURE_COUNT + 2;
+
+  /**
+   * The feature id for the '<em><b>Class Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__CLASS_TYPE = ENTITY_DEFINITION_FEATURE_COUNT + 3;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__COMMENT = ENTITY_DEFINITION_FEATURE_COUNT + 4;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__MODIFICATION = ENTITY_DEFINITION_FEATURE_COUNT + 5;
+
+  /**
+   * The feature id for the '<em><b>Elem List</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__ELEM_LIST = ENTITY_DEFINITION_FEATURE_COUNT + 6;
+
+  /**
+   * The feature id for the '<em><b>Initial Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES = ENTITY_DEFINITION_FEATURE_COUNT + 7;
+
+  /**
+   * The feature id for the '<em><b>Initial Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES = ENTITY_DEFINITION_FEATURE_COUNT + 8;
+
+  /**
+   * The feature id for the '<em><b>Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__EQUATION_CLAUSES = ENTITY_DEFINITION_FEATURE_COUNT + 9;
+
+  /**
+   * The feature id for the '<em><b>Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__ALGORITHM_CLAUSES = ENTITY_DEFINITION_FEATURE_COUNT + 10;
+
+  /**
+   * The feature id for the '<em><b>Ext Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION__EXT_CLAUSE = ENTITY_DEFINITION_FEATURE_COUNT + 11;
+
+  /**
+   * The number of structural features of the '<em>Class Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_DEFINITION_FEATURE_COUNT = ENTITY_DEFINITION_FEATURE_COUNT + 12;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.PartialDerivativeImpl <em>Partial Derivative</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.PartialDerivativeImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getPartialDerivative()
+   * @generated
+   */
+  int PARTIAL_DERIVATIVE = 3;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PARTIAL_DERIVATIVE__NAME = ENTITY_DEFINITION__NAME;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PARTIAL_DERIVATIVE__COMMENT = ENTITY_DEFINITION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Partial Derivative</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PARTIAL_DERIVATIVE_FEATURE_COUNT = ENTITY_DEFINITION_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl <em>Class Modification</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ClassModificationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassModification()
+   * @generated
+   */
+  int CLASS_MODIFICATION = 4;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__NAME = ENTITY_DEFINITION__NAME;
+
+  /**
+   * The feature id for the '<em><b>Expression</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__EXPRESSION = ENTITY_DEFINITION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Class Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__CLASS_TYPE = ENTITY_DEFINITION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__TYPE_SPECIFIER = ENTITY_DEFINITION_FEATURE_COUNT + 2;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__MODIFICATION = ENTITY_DEFINITION_FEATURE_COUNT + 3;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__COMMENT = ENTITY_DEFINITION_FEATURE_COUNT + 4;
+
+  /**
+   * The feature id for the '<em><b>Arguments</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION__ARGUMENTS = ENTITY_DEFINITION_FEATURE_COUNT + 5;
+
+  /**
+   * The number of structural features of the '<em>Class Modification</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_MODIFICATION_FEATURE_COUNT = ENTITY_DEFINITION_FEATURE_COUNT + 6;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ClassOverloadingImpl <em>Class Overloading</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ClassOverloadingImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassOverloading()
+   * @generated
+   */
+  int CLASS_OVERLOADING = 5;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_OVERLOADING__NAME = ENTITY_DEFINITION__NAME;
+
+  /**
+   * The feature id for the '<em><b>Class Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_OVERLOADING__CLASS_TYPE = ENTITY_DEFINITION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_OVERLOADING__COMMENT = ENTITY_DEFINITION_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Class Overloading</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_OVERLOADING_FEATURE_COUNT = ENTITY_DEFINITION_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.EnumerationImpl <em>Enumeration</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.EnumerationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getEnumeration()
+   * @generated
+   */
+  int ENUMERATION = 6;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENUMERATION__NAME = ENTITY_DEFINITION__NAME;
+
+  /**
+   * The feature id for the '<em><b>Class Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENUMERATION__CLASS_TYPE = ENTITY_DEFINITION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Ident</b></em>' attribute list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENUMERATION__IDENT = ENTITY_DEFINITION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Enum Comments</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENUMERATION__ENUM_COMMENTS = ENTITY_DEFINITION_FEATURE_COUNT + 2;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENUMERATION__COMMENT = ENTITY_DEFINITION_FEATURE_COUNT + 3;
+
+  /**
+   * The number of structural features of the '<em>Enumeration</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ENUMERATION_FEATURE_COUNT = ENTITY_DEFINITION_FEATURE_COUNT + 4;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl <em>External Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getExternalClause()
+   * @generated
+   */
+  int EXTERNAL_CLAUSE = 7;
+
+  /**
+   * The feature id for the '<em><b>Language Specification</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION = 0;
+
+  /**
+   * The feature id for the '<em><b>Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTERNAL_CLAUSE__ANNOTATION = 1;
+
+  /**
+   * The feature id for the '<em><b>Ext Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTERNAL_CLAUSE__EXT_ANNOTATION = 2;
+
+  /**
+   * The number of structural features of the '<em>External Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTERNAL_CLAUSE_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ElementListImpl <em>Element List</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ElementListImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementList()
+   * @generated
+   */
+  int ELEMENT_LIST = 8;
+
+  /**
+   * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_LIST__ELEMENTS = 0;
+
+  /**
+   * The feature id for the '<em><b>Annotations</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_LIST__ANNOTATIONS = 1;
+
+  /**
+   * The number of structural features of the '<em>Element List</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_LIST_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ClassElementImpl <em>Class Element</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ClassElementImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassElement()
+   * @generated
+   */
+  int CLASS_ELEMENT = 9;
+
+  /**
+   * The number of structural features of the '<em>Class Element</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CLASS_ELEMENT_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ReplaceableElementClauseImpl <em>Replaceable Element Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ReplaceableElementClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getReplaceableElementClause()
+   * @generated
+   */
+  int REPLACEABLE_ELEMENT_CLAUSE = 10;
+
+  /**
+   * The feature id for the '<em><b>Entity</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REPLACEABLE_ELEMENT_CLAUSE__ENTITY = CLASS_ELEMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Constrain</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN = CLASS_ELEMENT_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Replaceable Element Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REPLACEABLE_ELEMENT_CLAUSE_FEATURE_COUNT = CLASS_ELEMENT_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ImportClauseImpl <em>Import Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ImportClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getImportClause()
+   * @generated
+   */
+  int IMPORT_CLAUSE = 11;
+
+  /**
+   * The feature id for the '<em><b>As Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_CLAUSE__AS_NAME = CLASS_ELEMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_CLAUSE__NAME = CLASS_ELEMENT_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_CLAUSE__COMMENT = CLASS_ELEMENT_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Import Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_CLAUSE_FEATURE_COUNT = CLASS_ELEMENT_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl <em>Extends Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getExtendsClause()
+   * @generated
+   */
+  int EXTENDS_CLAUSE = 12;
+
+  /**
+   * The feature id for the '<em><b>Base Class</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTENDS_CLAUSE__BASE_CLASS = CLASS_ELEMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTENDS_CLAUSE__MODIFICATION = CLASS_ELEMENT_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTENDS_CLAUSE__ANNOTATION = CLASS_ELEMENT_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Extends Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXTENDS_CLAUSE_FEATURE_COUNT = CLASS_ELEMENT_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl <em>Constraining Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getConstrainingClause()
+   * @generated
+   */
+  int CONSTRAINING_CLAUSE = 13;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINING_CLAUSE__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINING_CLAUSE__MODIFICATION = 1;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINING_CLAUSE__COMMENT = 2;
+
+  /**
+   * The number of structural features of the '<em>Constraining Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONSTRAINING_CLAUSE_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl <em>Component Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getComponentClause()
+   * @generated
+   */
+  int COMPONENT_CLAUSE = 14;
+
+  /**
+   * The feature id for the '<em><b>Type Prefix</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_CLAUSE__TYPE_PREFIX = CLASS_ELEMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_CLAUSE__TYPE_SPECIFIER = CLASS_ELEMENT_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Declarations</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_CLAUSE__DECLARATIONS = CLASS_ELEMENT_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Component Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_CLAUSE_FEATURE_COUNT = CLASS_ELEMENT_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.TypeSpecifierImpl <em>Type Specifier</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.TypeSpecifierImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getTypeSpecifier()
+   * @generated
+   */
+  int TYPE_SPECIFIER = 15;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TYPE_SPECIFIER__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>Subscripts</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TYPE_SPECIFIER__SUBSCRIPTS = 1;
+
+  /**
+   * The number of structural features of the '<em>Type Specifier</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TYPE_SPECIFIER_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl <em>Component Declaration</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getComponentDeclaration()
+   * @generated
+   */
+  int COMPONENT_DECLARATION = 16;
+
+  /**
+   * The feature id for the '<em><b>Subscripts</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_DECLARATION__SUBSCRIPTS = 0;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_DECLARATION__MODIFICATION = 1;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_DECLARATION__CONDITION = 2;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_DECLARATION__COMMENT = 3;
+
+  /**
+   * The number of structural features of the '<em>Component Declaration</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMPONENT_DECLARATION_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ModificationImpl <em>Modification</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ModificationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getModification()
+   * @generated
+   */
+  int MODIFICATION = 17;
+
+  /**
+   * The feature id for the '<em><b>Expression</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODIFICATION__EXPRESSION = 0;
+
+  /**
+   * The number of structural features of the '<em>Modification</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MODIFICATION_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.SimpleModificationImpl <em>Simple Modification</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.SimpleModificationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getSimpleModification()
+   * @generated
+   */
+  int SIMPLE_MODIFICATION = 18;
+
+  /**
+   * The feature id for the '<em><b>Expression</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SIMPLE_MODIFICATION__EXPRESSION = MODIFICATION__EXPRESSION;
+
+  /**
+   * The number of structural features of the '<em>Simple Modification</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SIMPLE_MODIFICATION_FEATURE_COUNT = MODIFICATION_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.argumentImpl <em>argument</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.argumentImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getargument()
+   * @generated
+   */
+  int ARGUMENT = 19;
+
+  /**
+   * The number of structural features of the '<em>argument</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ARGUMENT_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ElementModificationImpl <em>Element Modification</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ElementModificationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementModification()
+   * @generated
+   */
+  int ELEMENT_MODIFICATION = 20;
+
+  /**
+   * The feature id for the '<em><b>Componet Ref</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_MODIFICATION__COMPONET_REF = ARGUMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_MODIFICATION__MODIFICATION = ARGUMENT_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_MODIFICATION__COMMENT = ARGUMENT_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Element Modification</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_MODIFICATION_FEATURE_COUNT = ARGUMENT_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ElementRedeclarationImpl <em>Element Redeclaration</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ElementRedeclarationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementRedeclaration()
+   * @generated
+   */
+  int ELEMENT_REDECLARATION = 21;
+
+  /**
+   * The number of structural features of the '<em>Element Redeclaration</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_REDECLARATION_FEATURE_COUNT = ARGUMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ElementReplaceableClauseImpl <em>Element Replaceable Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ElementReplaceableClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementReplaceableClause()
+   * @generated
+   */
+  int ELEMENT_REPLACEABLE_CLAUSE = 22;
+
+  /**
+   * The feature id for the '<em><b>Element</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_REPLACEABLE_CLAUSE__ELEMENT = ARGUMENT_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Constraint</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT = ARGUMENT_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Element Replaceable Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_REPLACEABLE_CLAUSE_FEATURE_COUNT = ARGUMENT_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl <em>Element Component Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementComponentClause()
+   * @generated
+   */
+  int ELEMENT_COMPONENT_CLAUSE = 23;
+
+  /**
+   * The feature id for the '<em><b>Type Prefix</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX = ELEMENT_REDECLARATION_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Type Specifier</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER = ELEMENT_REDECLARATION_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Subscripts</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS = ELEMENT_REDECLARATION_FEATURE_COUNT + 2;
+
+  /**
+   * The feature id for the '<em><b>Modification</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_COMPONENT_CLAUSE__MODIFICATION = ELEMENT_REDECLARATION_FEATURE_COUNT + 3;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_COMPONENT_CLAUSE__COMMENT = ELEMENT_REDECLARATION_FEATURE_COUNT + 4;
+
+  /**
+   * The number of structural features of the '<em>Element Component Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELEMENT_COMPONENT_CLAUSE_FEATURE_COUNT = ELEMENT_REDECLARATION_FEATURE_COUNT + 5;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.initial_equation_rule_clauseImpl <em>initial equation rule clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.initial_equation_rule_clauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getinitial_equation_rule_clause()
+   * @generated
+   */
+  int INITIAL_EQUATION_RULE_CLAUSE = 26;
+
+  /**
+   * The number of structural features of the '<em>initial equation rule clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INITIAL_EQUATION_RULE_CLAUSE_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.EquationClauseImpl <em>Equation Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.EquationClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getEquationClause()
+   * @generated
+   */
+  int EQUATION_CLAUSE = 24;
+
+  /**
+   * The feature id for the '<em><b>Equation Rules</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_CLAUSE__EQUATION_RULES = INITIAL_EQUATION_RULE_CLAUSE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Annotations</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_CLAUSE__ANNOTATIONS = INITIAL_EQUATION_RULE_CLAUSE_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Equation Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_CLAUSE_FEATURE_COUNT = INITIAL_EQUATION_RULE_CLAUSE_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.initial_algorithm_clauseImpl <em>initial algorithm clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.initial_algorithm_clauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getinitial_algorithm_clause()
+   * @generated
+   */
+  int INITIAL_ALGORITHM_CLAUSE = 27;
+
+  /**
+   * The number of structural features of the '<em>initial algorithm clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int INITIAL_ALGORITHM_CLAUSE_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.algorithm_clauseImpl <em>algorithm clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.algorithm_clauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getalgorithm_clause()
+   * @generated
+   */
+  int ALGORITHM_CLAUSE = 25;
+
+  /**
+   * The feature id for the '<em><b>Algorithm Rules</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_CLAUSE__ALGORITHM_RULES = INITIAL_ALGORITHM_CLAUSE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Annotations</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_CLAUSE__ANNOTATIONS = INITIAL_ALGORITHM_CLAUSE_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>algorithm clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_CLAUSE_FEATURE_COUNT = INITIAL_ALGORITHM_CLAUSE_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.equation_ruleImpl <em>equation rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.equation_ruleImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getequation_rule()
+   * @generated
+   */
+  int EQUATION_RULE = 28;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_RULE__COMMENT = 0;
+
+  /**
+   * The number of structural features of the '<em>equation rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_RULE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.algorithmImpl <em>algorithm</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.algorithmImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getalgorithm()
+   * @generated
+   */
+  int ALGORITHM = 29;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM__COMMENT = 0;
+
+  /**
+   * The number of structural features of the '<em>algorithm</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl <em>Conditional Equation Rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getConditionalEquationRule()
+   * @generated
+   */
+  int CONDITIONAL_EQUATION_RULE = 30;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITIONAL_EQUATION_RULE__COMMENT = EQUATION_RULE__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES = EQUATION_RULE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Elseif Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES = EQUATION_RULE_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Else Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES = EQUATION_RULE_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Conditional Equation Rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITIONAL_EQUATION_RULE_FEATURE_COUNT = EQUATION_RULE_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl <em>Condition Algorithm Rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getConditionAlgorithmRule()
+   * @generated
+   */
+  int CONDITION_ALGORITHM_RULE = 31;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITION_ALGORITHM_RULE__COMMENT = ALGORITHM__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITION_ALGORITHM_RULE__CONDITION = ALGORITHM_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES = ALGORITHM_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Elseif Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES = ALGORITHM_FEATURE_COUNT + 2;
+
+  /**
+   * The feature id for the '<em><b>Else Algotithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES = ALGORITHM_FEATURE_COUNT + 3;
+
+  /**
+   * The number of structural features of the '<em>Condition Algorithm Rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int CONDITION_ALGORITHM_RULE_FEATURE_COUNT = ALGORITHM_FEATURE_COUNT + 4;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ForEquationClauseImpl <em>For Equation Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ForEquationClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getForEquationClause()
+   * @generated
+   */
+  int FOR_EQUATION_CLAUSE = 32;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_EQUATION_CLAUSE__COMMENT = EQUATION_RULE__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>For Indices</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_EQUATION_CLAUSE__FOR_INDICES = EQUATION_RULE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_EQUATION_CLAUSE__EQUATION_CLAUSES = EQUATION_RULE_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>For Equation Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_EQUATION_CLAUSE_FEATURE_COUNT = EQUATION_RULE_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ForAlgorithmClauseImpl <em>For Algorithm Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ForAlgorithmClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getForAlgorithmClause()
+   * @generated
+   */
+  int FOR_ALGORITHM_CLAUSE = 33;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_ALGORITHM_CLAUSE__COMMENT = ALGORITHM__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>For Indices</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_ALGORITHM_CLAUSE__FOR_INDICES = ALGORITHM_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES = ALGORITHM_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>For Algorithm Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FOR_ALGORITHM_CLAUSE_FEATURE_COUNT = ALGORITHM_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.WhileClauseImpl <em>While Clause</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.WhileClauseImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getWhileClause()
+   * @generated
+   */
+  int WHILE_CLAUSE = 34;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHILE_CLAUSE__COMMENT = ALGORITHM__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHILE_CLAUSE__CONDITION = ALGORITHM_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHILE_CLAUSE__ALGORITHM_CLAUSES = ALGORITHM_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>While Clause</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHILE_CLAUSE_FEATURE_COUNT = ALGORITHM_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.when_clause_eImpl <em>when clause e</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.when_clause_eImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getwhen_clause_e()
+   * @generated
+   */
+  int WHEN_CLAUSE_E = 35;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_E__COMMENT = EQUATION_RULE__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_E__CONDITION = EQUATION_RULE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES = EQUATION_RULE_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Else When Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES = EQUATION_RULE_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>when clause e</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_E_FEATURE_COUNT = EQUATION_RULE_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.else_when_eImpl <em>else when e</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.else_when_eImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getelse_when_e()
+   * @generated
+   */
+  int ELSE_WHEN_E = 36;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELSE_WHEN_E__CONDITION = 0;
+
+  /**
+   * The feature id for the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELSE_WHEN_E__THEN_EQUATION_CLAUSES = 1;
+
+  /**
+   * The number of structural features of the '<em>else when e</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELSE_WHEN_E_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.when_clause_aImpl <em>when clause a</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.when_clause_aImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getwhen_clause_a()
+   * @generated
+   */
+  int WHEN_CLAUSE_A = 37;
+
+  /**
+   * The feature id for the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_A__COMMENT = ALGORITHM__COMMENT;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_A__CONDITION = ALGORITHM_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES = ALGORITHM_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>Else When Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES = ALGORITHM_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>when clause a</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int WHEN_CLAUSE_A_FEATURE_COUNT = ALGORITHM_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.else_when_aImpl <em>else when a</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.else_when_aImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getelse_when_a()
+   * @generated
+   */
+  int ELSE_WHEN_A = 38;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELSE_WHEN_A__CONDITION = 0;
+
+  /**
+   * The feature id for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES = 1;
+
+  /**
+   * The number of structural features of the '<em>else when a</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ELSE_WHEN_A_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.equation_rule_elseifImpl <em>equation rule elseif</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.equation_rule_elseifImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getequation_rule_elseif()
+   * @generated
+   */
+  int EQUATION_RULE_ELSEIF = 39;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_RULE_ELSEIF__CONDITION = 0;
+
+  /**
+   * The feature id for the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES = 1;
+
+  /**
+   * The number of structural features of the '<em>equation rule elseif</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EQUATION_RULE_ELSEIF_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.algorithm_elseifImpl <em>algorithm elseif</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.algorithm_elseifImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getalgorithm_elseif()
+   * @generated
+   */
+  int ALGORITHM_ELSEIF = 40;
+
+  /**
+   * The feature id for the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_ELSEIF__CONDITION = 0;
+
+  /**
+   * The feature id for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES = 1;
+
+  /**
+   * The number of structural features of the '<em>algorithm elseif</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ALGORITHM_ELSEIF_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.CommentImpl <em>Comment</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.CommentImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getComment()
+   * @generated
+   */
+  int COMMENT = 41;
+
+  /**
+   * The feature id for the '<em><b>String</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMMENT__STRING = 0;
+
+  /**
+   * The feature id for the '<em><b>Annotation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMMENT__ANNOTATION = 1;
+
+  /**
+   * The number of structural features of the '<em>Comment</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int COMMENT_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.AnnotationImpl <em>Annotation</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.AnnotationImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getAnnotation()
+   * @generated
+   */
+  int ANNOTATION = 42;
+
+  /**
+   * The number of structural features of the '<em>Annotation</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ANNOTATION_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.PublicElementListImpl <em>Public Element List</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.PublicElementListImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getPublicElementList()
+   * @generated
+   */
+  int PUBLIC_ELEMENT_LIST = 43;
+
+  /**
+   * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PUBLIC_ELEMENT_LIST__ELEMENTS = ELEMENT_LIST__ELEMENTS;
+
+  /**
+   * The feature id for the '<em><b>Annotations</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PUBLIC_ELEMENT_LIST__ANNOTATIONS = ELEMENT_LIST__ANNOTATIONS;
+
+  /**
+   * The number of structural features of the '<em>Public Element List</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PUBLIC_ELEMENT_LIST_FEATURE_COUNT = ELEMENT_LIST_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.impl.ProtectesElementListImpl <em>Protectes Element List</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.impl.ProtectesElementListImpl
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getProtectesElementList()
+   * @generated
+   */
+  int PROTECTES_ELEMENT_LIST = 44;
+
+  /**
+   * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PROTECTES_ELEMENT_LIST__ELEMENTS = ELEMENT_LIST__ELEMENTS;
+
+  /**
+   * The feature id for the '<em><b>Annotations</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PROTECTES_ELEMENT_LIST__ANNOTATIONS = ELEMENT_LIST__ANNOTATIONS;
+
+  /**
+   * The number of structural features of the '<em>Protectes Element List</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int PROTECTES_ELEMENT_LIST_FEATURE_COUNT = ELEMENT_LIST_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.modelica.xtext.modelicaBase.ClassType <em>Class Type</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassType()
+   * @generated
+   */
+  int CLASS_TYPE = 45;
+
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.StorageUnit <em>Storage Unit</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Storage Unit</em>'.
+   * @see org.modelica.xtext.modelicaBase.StorageUnit
+   * @generated
+   */
+  EClass getStorageUnit();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.StorageUnit#getClassDefinition <em>Class Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Class Definition</em>'.
+   * @see org.modelica.xtext.modelicaBase.StorageUnit#getClassDefinition()
+   * @see #getStorageUnit()
+   * @generated
+   */
+  EReference getStorageUnit_ClassDefinition();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.EntityDefinition <em>Entity Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Entity Definition</em>'.
+   * @see org.modelica.xtext.modelicaBase.EntityDefinition
+   * @generated
+   */
+  EClass getEntityDefinition();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.EntityDefinition#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.modelica.xtext.modelicaBase.EntityDefinition#getName()
+   * @see #getEntityDefinition()
+   * @generated
+   */
+  EAttribute getEntityDefinition_Name();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ClassDefinition <em>Class Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Class Definition</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition
+   * @generated
+   */
+  EClass getClassDefinition();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassDefinition#isEncapsulated <em>Encapsulated</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Encapsulated</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#isEncapsulated()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EAttribute getClassDefinition_Encapsulated();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassDefinition#isPartial <em>Partial</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Partial</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#isPartial()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EAttribute getClassDefinition_Partial();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassDefinition#isExpandable <em>Expandable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Expandable</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#isExpandable()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EAttribute getClassDefinition_Expandable();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getClassType <em>Class Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Class Type</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getClassType()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EAttribute getClassDefinition_ClassType();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getComment()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EAttribute getClassDefinition_Comment();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getModification()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_Modification();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getElemList <em>Elem List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Elem List</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getElemList()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_ElemList();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getInitialEquationClauses <em>Initial Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Initial Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getInitialEquationClauses()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_InitialEquationClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getInitialAlgorithmClauses <em>Initial Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Initial Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getInitialAlgorithmClauses()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_InitialAlgorithmClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getEquationClauses <em>Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getEquationClauses()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_EquationClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getAlgorithmClauses <em>Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getAlgorithmClauses()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_AlgorithmClauses();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ClassDefinition#getExtClause <em>Ext Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Ext Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassDefinition#getExtClause()
+   * @see #getClassDefinition()
+   * @generated
+   */
+  EReference getClassDefinition_ExtClause();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.PartialDerivative <em>Partial Derivative</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Partial Derivative</em>'.
+   * @see org.modelica.xtext.modelicaBase.PartialDerivative
+   * @generated
+   */
+  EClass getPartialDerivative();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.PartialDerivative#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.PartialDerivative#getComment()
+   * @see #getPartialDerivative()
+   * @generated
+   */
+  EReference getPartialDerivative_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ClassModification <em>Class Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Class Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassModification
+   * @generated
+   */
+  EClass getClassModification();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassModification#getClassType <em>Class Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Class Type</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassModification#getClassType()
+   * @see #getClassModification()
+   * @generated
+   */
+  EAttribute getClassModification_ClassType();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ClassModification#getTypeSpecifier <em>Type Specifier</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Type Specifier</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassModification#getTypeSpecifier()
+   * @see #getClassModification()
+   * @generated
+   */
+  EReference getClassModification_TypeSpecifier();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ClassModification#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassModification#getModification()
+   * @see #getClassModification()
+   * @generated
+   */
+  EReference getClassModification_Modification();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ClassModification#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassModification#getComment()
+   * @see #getClassModification()
+   * @generated
+   */
+  EReference getClassModification_Comment();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ClassModification#getArguments <em>Arguments</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Arguments</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassModification#getArguments()
+   * @see #getClassModification()
+   * @generated
+   */
+  EReference getClassModification_Arguments();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ClassOverloading <em>Class Overloading</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Class Overloading</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassOverloading
+   * @generated
+   */
+  EClass getClassOverloading();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ClassOverloading#getClassType <em>Class Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Class Type</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassOverloading#getClassType()
+   * @see #getClassOverloading()
+   * @generated
+   */
+  EAttribute getClassOverloading_ClassType();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ClassOverloading#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassOverloading#getComment()
+   * @see #getClassOverloading()
+   * @generated
+   */
+  EReference getClassOverloading_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.Enumeration <em>Enumeration</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Enumeration</em>'.
+   * @see org.modelica.xtext.modelicaBase.Enumeration
+   * @generated
+   */
+  EClass getEnumeration();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.Enumeration#getClassType <em>Class Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Class Type</em>'.
+   * @see org.modelica.xtext.modelicaBase.Enumeration#getClassType()
+   * @see #getEnumeration()
+   * @generated
+   */
+  EAttribute getEnumeration_ClassType();
+
+  /**
+   * Returns the meta object for the attribute list '{@link org.modelica.xtext.modelicaBase.Enumeration#getIdent <em>Ident</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute list '<em>Ident</em>'.
+   * @see org.modelica.xtext.modelicaBase.Enumeration#getIdent()
+   * @see #getEnumeration()
+   * @generated
+   */
+  EAttribute getEnumeration_Ident();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.Enumeration#getEnumComments <em>Enum Comments</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Enum Comments</em>'.
+   * @see org.modelica.xtext.modelicaBase.Enumeration#getEnumComments()
+   * @see #getEnumeration()
+   * @generated
+   */
+  EReference getEnumeration_EnumComments();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.Enumeration#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.Enumeration#getComment()
+   * @see #getEnumeration()
+   * @generated
+   */
+  EReference getEnumeration_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ExternalClause <em>External Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>External Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExternalClause
+   * @generated
+   */
+  EClass getExternalClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ExternalClause#getLanguageSpecification <em>Language Specification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Language Specification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExternalClause#getLanguageSpecification()
+   * @see #getExternalClause()
+   * @generated
+   */
+  EAttribute getExternalClause_LanguageSpecification();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ExternalClause#getAnnotation <em>Annotation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Annotation</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExternalClause#getAnnotation()
+   * @see #getExternalClause()
+   * @generated
+   */
+  EReference getExternalClause_Annotation();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ExternalClause#getExtAnnotation <em>Ext Annotation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Ext Annotation</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExternalClause#getExtAnnotation()
+   * @see #getExternalClause()
+   * @generated
+   */
+  EReference getExternalClause_ExtAnnotation();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ElementList <em>Element List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Element List</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementList
+   * @generated
+   */
+  EClass getElementList();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ElementList#getElements <em>Elements</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Elements</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementList#getElements()
+   * @see #getElementList()
+   * @generated
+   */
+  EReference getElementList_Elements();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ElementList#getAnnotations <em>Annotations</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Annotations</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementList#getAnnotations()
+   * @see #getElementList()
+   * @generated
+   */
+  EReference getElementList_Annotations();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ClassElement <em>Class Element</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Class Element</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassElement
+   * @generated
+   */
+  EClass getClassElement();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause <em>Replaceable Element Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Replaceable Element Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ReplaceableElementClause
+   * @generated
+   */
+  EClass getReplaceableElementClause();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause#getEntity <em>Entity</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Entity</em>'.
+   * @see org.modelica.xtext.modelicaBase.ReplaceableElementClause#getEntity()
+   * @see #getReplaceableElementClause()
+   * @generated
+   */
+  EReference getReplaceableElementClause_Entity();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause#getConstrain <em>Constrain</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Constrain</em>'.
+   * @see org.modelica.xtext.modelicaBase.ReplaceableElementClause#getConstrain()
+   * @see #getReplaceableElementClause()
+   * @generated
+   */
+  EReference getReplaceableElementClause_Constrain();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ImportClause <em>Import Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Import Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ImportClause
+   * @generated
+   */
+  EClass getImportClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ImportClause#getAsName <em>As Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>As Name</em>'.
+   * @see org.modelica.xtext.modelicaBase.ImportClause#getAsName()
+   * @see #getImportClause()
+   * @generated
+   */
+  EAttribute getImportClause_AsName();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ImportClause#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.modelica.xtext.modelicaBase.ImportClause#getName()
+   * @see #getImportClause()
+   * @generated
+   */
+  EAttribute getImportClause_Name();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ImportClause#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ImportClause#getComment()
+   * @see #getImportClause()
+   * @generated
+   */
+  EReference getImportClause_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ExtendsClause <em>Extends Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Extends Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExtendsClause
+   * @generated
+   */
+  EClass getExtendsClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ExtendsClause#getBaseClass <em>Base Class</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Base Class</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExtendsClause#getBaseClass()
+   * @see #getExtendsClause()
+   * @generated
+   */
+  EAttribute getExtendsClause_BaseClass();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ExtendsClause#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExtendsClause#getModification()
+   * @see #getExtendsClause()
+   * @generated
+   */
+  EReference getExtendsClause_Modification();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ExtendsClause#getAnnotation <em>Annotation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Annotation</em>'.
+   * @see org.modelica.xtext.modelicaBase.ExtendsClause#getAnnotation()
+   * @see #getExtendsClause()
+   * @generated
+   */
+  EReference getExtendsClause_Annotation();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ConstrainingClause <em>Constraining Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Constraining Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConstrainingClause
+   * @generated
+   */
+  EClass getConstrainingClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConstrainingClause#getName()
+   * @see #getConstrainingClause()
+   * @generated
+   */
+  EAttribute getConstrainingClause_Name();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConstrainingClause#getModification()
+   * @see #getConstrainingClause()
+   * @generated
+   */
+  EReference getConstrainingClause_Modification();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ConstrainingClause#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConstrainingClause#getComment()
+   * @see #getConstrainingClause()
+   * @generated
+   */
+  EReference getConstrainingClause_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ComponentClause <em>Component Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Component Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentClause
+   * @generated
+   */
+  EClass getComponentClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ComponentClause#getTypePrefix <em>Type Prefix</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Type Prefix</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentClause#getTypePrefix()
+   * @see #getComponentClause()
+   * @generated
+   */
+  EAttribute getComponentClause_TypePrefix();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ComponentClause#getTypeSpecifier <em>Type Specifier</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Type Specifier</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentClause#getTypeSpecifier()
+   * @see #getComponentClause()
+   * @generated
+   */
+  EReference getComponentClause_TypeSpecifier();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ComponentClause#getDeclarations <em>Declarations</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Declarations</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentClause#getDeclarations()
+   * @see #getComponentClause()
+   * @generated
+   */
+  EReference getComponentClause_Declarations();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.TypeSpecifier <em>Type Specifier</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Type Specifier</em>'.
+   * @see org.modelica.xtext.modelicaBase.TypeSpecifier
+   * @generated
+   */
+  EClass getTypeSpecifier();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.TypeSpecifier#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.modelica.xtext.modelicaBase.TypeSpecifier#getName()
+   * @see #getTypeSpecifier()
+   * @generated
+   */
+  EAttribute getTypeSpecifier_Name();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.TypeSpecifier#getSubscripts <em>Subscripts</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Subscripts</em>'.
+   * @see org.modelica.xtext.modelicaBase.TypeSpecifier#getSubscripts()
+   * @see #getTypeSpecifier()
+   * @generated
+   */
+  EAttribute getTypeSpecifier_Subscripts();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration <em>Component Declaration</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Component Declaration</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentDeclaration
+   * @generated
+   */
+  EClass getComponentDeclaration();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getSubscripts <em>Subscripts</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Subscripts</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentDeclaration#getSubscripts()
+   * @see #getComponentDeclaration()
+   * @generated
+   */
+  EAttribute getComponentDeclaration_Subscripts();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentDeclaration#getModification()
+   * @see #getComponentDeclaration()
+   * @generated
+   */
+  EReference getComponentDeclaration_Modification();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentDeclaration#getCondition()
+   * @see #getComponentDeclaration()
+   * @generated
+   */
+  EAttribute getComponentDeclaration_Condition();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ComponentDeclaration#getComment()
+   * @see #getComponentDeclaration()
+   * @generated
+   */
+  EReference getComponentDeclaration_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.Modification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.Modification
+   * @generated
+   */
+  EClass getModification();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.Modification#getExpression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Expression</em>'.
+   * @see org.modelica.xtext.modelicaBase.Modification#getExpression()
+   * @see #getModification()
+   * @generated
+   */
+  EAttribute getModification_Expression();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.SimpleModification <em>Simple Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Simple Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.SimpleModification
+   * @generated
+   */
+  EClass getSimpleModification();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.argument <em>argument</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>argument</em>'.
+   * @see org.modelica.xtext.modelicaBase.argument
+   * @generated
+   */
+  EClass getargument();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ElementModification <em>Element Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Element Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementModification
+   * @generated
+   */
+  EClass getElementModification();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ElementModification#getComponetRef <em>Componet Ref</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Componet Ref</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementModification#getComponetRef()
+   * @see #getElementModification()
+   * @generated
+   */
+  EAttribute getElementModification_ComponetRef();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ElementModification#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementModification#getModification()
+   * @see #getElementModification()
+   * @generated
+   */
+  EReference getElementModification_Modification();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ElementModification#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementModification#getComment()
+   * @see #getElementModification()
+   * @generated
+   */
+  EAttribute getElementModification_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ElementRedeclaration <em>Element Redeclaration</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Element Redeclaration</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementRedeclaration
+   * @generated
+   */
+  EClass getElementRedeclaration();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause <em>Element Replaceable Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Element Replaceable Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementReplaceableClause
+   * @generated
+   */
+  EClass getElementReplaceableClause();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause#getElement <em>Element</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Element</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementReplaceableClause#getElement()
+   * @see #getElementReplaceableClause()
+   * @generated
+   */
+  EReference getElementReplaceableClause_Element();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause#getConstraint <em>Constraint</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Constraint</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementReplaceableClause#getConstraint()
+   * @see #getElementReplaceableClause()
+   * @generated
+   */
+  EReference getElementReplaceableClause_Constraint();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ElementComponentClause <em>Element Component Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Element Component Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementComponentClause
+   * @generated
+   */
+  EClass getElementComponentClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getTypePrefix <em>Type Prefix</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Type Prefix</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementComponentClause#getTypePrefix()
+   * @see #getElementComponentClause()
+   * @generated
+   */
+  EAttribute getElementComponentClause_TypePrefix();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getTypeSpecifier <em>Type Specifier</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Type Specifier</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementComponentClause#getTypeSpecifier()
+   * @see #getElementComponentClause()
+   * @generated
+   */
+  EReference getElementComponentClause_TypeSpecifier();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getSubscripts <em>Subscripts</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Subscripts</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementComponentClause#getSubscripts()
+   * @see #getElementComponentClause()
+   * @generated
+   */
+  EAttribute getElementComponentClause_Subscripts();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getModification <em>Modification</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Modification</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementComponentClause#getModification()
+   * @see #getElementComponentClause()
+   * @generated
+   */
+  EReference getElementComponentClause_Modification();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.ElementComponentClause#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.ElementComponentClause#getComment()
+   * @see #getElementComponentClause()
+   * @generated
+   */
+  EReference getElementComponentClause_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.EquationClause <em>Equation Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Equation Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.EquationClause
+   * @generated
+   */
+  EClass getEquationClause();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.EquationClause#getEquationRules <em>Equation Rules</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Equation Rules</em>'.
+   * @see org.modelica.xtext.modelicaBase.EquationClause#getEquationRules()
+   * @see #getEquationClause()
+   * @generated
+   */
+  EReference getEquationClause_EquationRules();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.EquationClause#getAnnotations <em>Annotations</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Annotations</em>'.
+   * @see org.modelica.xtext.modelicaBase.EquationClause#getAnnotations()
+   * @see #getEquationClause()
+   * @generated
+   */
+  EReference getEquationClause_Annotations();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.algorithm_clause <em>algorithm clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>algorithm clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm_clause
+   * @generated
+   */
+  EClass getalgorithm_clause();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.algorithm_clause#getAlgorithmRules <em>Algorithm Rules</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Algorithm Rules</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm_clause#getAlgorithmRules()
+   * @see #getalgorithm_clause()
+   * @generated
+   */
+  EReference getalgorithm_clause_AlgorithmRules();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.algorithm_clause#getAnnotations <em>Annotations</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Annotations</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm_clause#getAnnotations()
+   * @see #getalgorithm_clause()
+   * @generated
+   */
+  EReference getalgorithm_clause_Annotations();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.initial_equation_rule_clause <em>initial equation rule clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>initial equation rule clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.initial_equation_rule_clause
+   * @generated
+   */
+  EClass getinitial_equation_rule_clause();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.initial_algorithm_clause <em>initial algorithm clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>initial algorithm clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.initial_algorithm_clause
+   * @generated
+   */
+  EClass getinitial_algorithm_clause();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.equation_rule <em>equation rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>equation rule</em>'.
+   * @see org.modelica.xtext.modelicaBase.equation_rule
+   * @generated
+   */
+  EClass getequation_rule();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.equation_rule#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.equation_rule#getComment()
+   * @see #getequation_rule()
+   * @generated
+   */
+  EReference getequation_rule_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.algorithm <em>algorithm</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>algorithm</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm
+   * @generated
+   */
+  EClass getalgorithm();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.algorithm#getComment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm#getComment()
+   * @see #getalgorithm()
+   * @generated
+   */
+  EReference getalgorithm_Comment();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule <em>Conditional Equation Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Conditional Equation Rule</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionalEquationRule
+   * @generated
+   */
+  EClass getConditionalEquationRule();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule#getThenEquationClauses <em>Then Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionalEquationRule#getThenEquationClauses()
+   * @see #getConditionalEquationRule()
+   * @generated
+   */
+  EReference getConditionalEquationRule_ThenEquationClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule#getElseifClauses <em>Elseif Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Elseif Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionalEquationRule#getElseifClauses()
+   * @see #getConditionalEquationRule()
+   * @generated
+   */
+  EReference getConditionalEquationRule_ElseifClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule#getElseEquationClauses <em>Else Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Else Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionalEquationRule#getElseEquationClauses()
+   * @see #getConditionalEquationRule()
+   * @generated
+   */
+  EReference getConditionalEquationRule_ElseEquationClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule <em>Condition Algorithm Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Condition Algorithm Rule</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionAlgorithmRule
+   * @generated
+   */
+  EClass getConditionAlgorithmRule();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getCondition()
+   * @see #getConditionAlgorithmRule()
+   * @generated
+   */
+  EAttribute getConditionAlgorithmRule_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getThenAlgorithmClauses()
+   * @see #getConditionAlgorithmRule()
+   * @generated
+   */
+  EReference getConditionAlgorithmRule_ThenAlgorithmClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getElseifClauses <em>Elseif Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Elseif Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getElseifClauses()
+   * @see #getConditionAlgorithmRule()
+   * @generated
+   */
+  EReference getConditionAlgorithmRule_ElseifClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getElseAlgotithmClauses <em>Else Algotithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Else Algotithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ConditionAlgorithmRule#getElseAlgotithmClauses()
+   * @see #getConditionAlgorithmRule()
+   * @generated
+   */
+  EReference getConditionAlgorithmRule_ElseAlgotithmClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ForEquationClause <em>For Equation Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>For Equation Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ForEquationClause
+   * @generated
+   */
+  EClass getForEquationClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ForEquationClause#getForIndices <em>For Indices</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>For Indices</em>'.
+   * @see org.modelica.xtext.modelicaBase.ForEquationClause#getForIndices()
+   * @see #getForEquationClause()
+   * @generated
+   */
+  EAttribute getForEquationClause_ForIndices();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ForEquationClause#getEquationClauses <em>Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ForEquationClause#getEquationClauses()
+   * @see #getForEquationClause()
+   * @generated
+   */
+  EReference getForEquationClause_EquationClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause <em>For Algorithm Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>For Algorithm Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.ForAlgorithmClause
+   * @generated
+   */
+  EClass getForAlgorithmClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause#getForIndices <em>For Indices</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>For Indices</em>'.
+   * @see org.modelica.xtext.modelicaBase.ForAlgorithmClause#getForIndices()
+   * @see #getForAlgorithmClause()
+   * @generated
+   */
+  EAttribute getForAlgorithmClause_ForIndices();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause#getAlgorithmClauses <em>Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.ForAlgorithmClause#getAlgorithmClauses()
+   * @see #getForAlgorithmClause()
+   * @generated
+   */
+  EReference getForAlgorithmClause_AlgorithmClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.WhileClause <em>While Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>While Clause</em>'.
+   * @see org.modelica.xtext.modelicaBase.WhileClause
+   * @generated
+   */
+  EClass getWhileClause();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.WhileClause#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.WhileClause#getCondition()
+   * @see #getWhileClause()
+   * @generated
+   */
+  EAttribute getWhileClause_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.WhileClause#getAlgorithmClauses <em>Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.WhileClause#getAlgorithmClauses()
+   * @see #getWhileClause()
+   * @generated
+   */
+  EReference getWhileClause_AlgorithmClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.when_clause_e <em>when clause e</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>when clause e</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_e
+   * @generated
+   */
+  EClass getwhen_clause_e();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.when_clause_e#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_e#getCondition()
+   * @see #getwhen_clause_e()
+   * @generated
+   */
+  EAttribute getwhen_clause_e_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.when_clause_e#getThenEquationClauses <em>Then Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_e#getThenEquationClauses()
+   * @see #getwhen_clause_e()
+   * @generated
+   */
+  EReference getwhen_clause_e_ThenEquationClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.when_clause_e#getElseWhenClauses <em>Else When Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Else When Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_e#getElseWhenClauses()
+   * @see #getwhen_clause_e()
+   * @generated
+   */
+  EReference getwhen_clause_e_ElseWhenClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.else_when_e <em>else when e</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>else when e</em>'.
+   * @see org.modelica.xtext.modelicaBase.else_when_e
+   * @generated
+   */
+  EClass getelse_when_e();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.else_when_e#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.else_when_e#getCondition()
+   * @see #getelse_when_e()
+   * @generated
+   */
+  EAttribute getelse_when_e_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.else_when_e#getThenEquationClauses <em>Then Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.else_when_e#getThenEquationClauses()
+   * @see #getelse_when_e()
+   * @generated
+   */
+  EReference getelse_when_e_ThenEquationClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.when_clause_a <em>when clause a</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>when clause a</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_a
+   * @generated
+   */
+  EClass getwhen_clause_a();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.when_clause_a#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_a#getCondition()
+   * @see #getwhen_clause_a()
+   * @generated
+   */
+  EAttribute getwhen_clause_a_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.when_clause_a#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_a#getThenAlgorithmClauses()
+   * @see #getwhen_clause_a()
+   * @generated
+   */
+  EReference getwhen_clause_a_ThenAlgorithmClauses();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.when_clause_a#getElseWhenClauses <em>Else When Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Else When Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.when_clause_a#getElseWhenClauses()
+   * @see #getwhen_clause_a()
+   * @generated
+   */
+  EReference getwhen_clause_a_ElseWhenClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.else_when_a <em>else when a</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>else when a</em>'.
+   * @see org.modelica.xtext.modelicaBase.else_when_a
+   * @generated
+   */
+  EClass getelse_when_a();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.else_when_a#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.else_when_a#getCondition()
+   * @see #getelse_when_a()
+   * @generated
+   */
+  EAttribute getelse_when_a_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.else_when_a#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.else_when_a#getThenAlgorithmClauses()
+   * @see #getelse_when_a()
+   * @generated
+   */
+  EReference getelse_when_a_ThenAlgorithmClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.equation_rule_elseif <em>equation rule elseif</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>equation rule elseif</em>'.
+   * @see org.modelica.xtext.modelicaBase.equation_rule_elseif
+   * @generated
+   */
+  EClass getequation_rule_elseif();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.equation_rule_elseif#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.equation_rule_elseif#getCondition()
+   * @see #getequation_rule_elseif()
+   * @generated
+   */
+  EAttribute getequation_rule_elseif_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.equation_rule_elseif#getThenEquationClauses <em>Then Equation Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Equation Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.equation_rule_elseif#getThenEquationClauses()
+   * @see #getequation_rule_elseif()
+   * @generated
+   */
+  EReference getequation_rule_elseif_ThenEquationClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.algorithm_elseif <em>algorithm elseif</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>algorithm elseif</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm_elseif
+   * @generated
+   */
+  EClass getalgorithm_elseif();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.algorithm_elseif#getCondition <em>Condition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Condition</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm_elseif#getCondition()
+   * @see #getalgorithm_elseif()
+   * @generated
+   */
+  EAttribute getalgorithm_elseif_Condition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.modelica.xtext.modelicaBase.algorithm_elseif#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Then Algorithm Clauses</em>'.
+   * @see org.modelica.xtext.modelicaBase.algorithm_elseif#getThenAlgorithmClauses()
+   * @see #getalgorithm_elseif()
+   * @generated
+   */
+  EReference getalgorithm_elseif_ThenAlgorithmClauses();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.Comment <em>Comment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Comment</em>'.
+   * @see org.modelica.xtext.modelicaBase.Comment
+   * @generated
+   */
+  EClass getComment();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.modelica.xtext.modelicaBase.Comment#getString <em>String</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>String</em>'.
+   * @see org.modelica.xtext.modelicaBase.Comment#getString()
+   * @see #getComment()
+   * @generated
+   */
+  EAttribute getComment_String();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.modelica.xtext.modelicaBase.Comment#getAnnotation <em>Annotation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Annotation</em>'.
+   * @see org.modelica.xtext.modelicaBase.Comment#getAnnotation()
+   * @see #getComment()
+   * @generated
+   */
+  EReference getComment_Annotation();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.Annotation <em>Annotation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Annotation</em>'.
+   * @see org.modelica.xtext.modelicaBase.Annotation
+   * @generated
+   */
+  EClass getAnnotation();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.PublicElementList <em>Public Element List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Public Element List</em>'.
+   * @see org.modelica.xtext.modelicaBase.PublicElementList
+   * @generated
+   */
+  EClass getPublicElementList();
+
+  /**
+   * Returns the meta object for class '{@link org.modelica.xtext.modelicaBase.ProtectesElementList <em>Protectes Element List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Protectes Element List</em>'.
+   * @see org.modelica.xtext.modelicaBase.ProtectesElementList
+   * @generated
+   */
+  EClass getProtectesElementList();
+
+  /**
+   * Returns the meta object for enum '{@link org.modelica.xtext.modelicaBase.ClassType <em>Class Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Class Type</em>'.
+   * @see org.modelica.xtext.modelicaBase.ClassType
+   * @generated
+   */
+  EEnum getClassType();
+
+  /**
+   * 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
+   */
+  ModelicaBaseFactory getModelicaBaseFactory();
+
+  /**
+   * <!-- 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.modelica.xtext.modelicaBase.impl.StorageUnitImpl <em>Storage Unit</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.StorageUnitImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getStorageUnit()
+     * @generated
+     */
+    EClass STORAGE_UNIT = eINSTANCE.getStorageUnit();
+
+    /**
+     * The meta object literal for the '<em><b>Class Definition</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference STORAGE_UNIT__CLASS_DEFINITION = eINSTANCE.getStorageUnit_ClassDefinition();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.EntityDefinitionImpl <em>Entity Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.EntityDefinitionImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getEntityDefinition()
+     * @generated
+     */
+    EClass ENTITY_DEFINITION = eINSTANCE.getEntityDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ENTITY_DEFINITION__NAME = eINSTANCE.getEntityDefinition_Name();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl <em>Class Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassDefinition()
+     * @generated
+     */
+    EClass CLASS_DEFINITION = eINSTANCE.getClassDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Encapsulated</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_DEFINITION__ENCAPSULATED = eINSTANCE.getClassDefinition_Encapsulated();
+
+    /**
+     * The meta object literal for the '<em><b>Partial</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_DEFINITION__PARTIAL = eINSTANCE.getClassDefinition_Partial();
+
+    /**
+     * The meta object literal for the '<em><b>Expandable</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_DEFINITION__EXPANDABLE = eINSTANCE.getClassDefinition_Expandable();
+
+    /**
+     * The meta object literal for the '<em><b>Class Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_DEFINITION__CLASS_TYPE = eINSTANCE.getClassDefinition_ClassType();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_DEFINITION__COMMENT = eINSTANCE.getClassDefinition_Comment();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__MODIFICATION = eINSTANCE.getClassDefinition_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Elem List</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__ELEM_LIST = eINSTANCE.getClassDefinition_ElemList();
+
+    /**
+     * The meta object literal for the '<em><b>Initial Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES = eINSTANCE.getClassDefinition_InitialEquationClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Initial Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES = eINSTANCE.getClassDefinition_InitialAlgorithmClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__EQUATION_CLAUSES = eINSTANCE.getClassDefinition_EquationClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__ALGORITHM_CLAUSES = eINSTANCE.getClassDefinition_AlgorithmClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Ext Clause</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_DEFINITION__EXT_CLAUSE = eINSTANCE.getClassDefinition_ExtClause();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.PartialDerivativeImpl <em>Partial Derivative</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.PartialDerivativeImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getPartialDerivative()
+     * @generated
+     */
+    EClass PARTIAL_DERIVATIVE = eINSTANCE.getPartialDerivative();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference PARTIAL_DERIVATIVE__COMMENT = eINSTANCE.getPartialDerivative_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl <em>Class Modification</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ClassModificationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassModification()
+     * @generated
+     */
+    EClass CLASS_MODIFICATION = eINSTANCE.getClassModification();
+
+    /**
+     * The meta object literal for the '<em><b>Class Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_MODIFICATION__CLASS_TYPE = eINSTANCE.getClassModification_ClassType();
+
+    /**
+     * The meta object literal for the '<em><b>Type Specifier</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_MODIFICATION__TYPE_SPECIFIER = eINSTANCE.getClassModification_TypeSpecifier();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_MODIFICATION__MODIFICATION = eINSTANCE.getClassModification_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_MODIFICATION__COMMENT = eINSTANCE.getClassModification_Comment();
+
+    /**
+     * The meta object literal for the '<em><b>Arguments</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_MODIFICATION__ARGUMENTS = eINSTANCE.getClassModification_Arguments();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ClassOverloadingImpl <em>Class Overloading</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ClassOverloadingImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassOverloading()
+     * @generated
+     */
+    EClass CLASS_OVERLOADING = eINSTANCE.getClassOverloading();
+
+    /**
+     * The meta object literal for the '<em><b>Class Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CLASS_OVERLOADING__CLASS_TYPE = eINSTANCE.getClassOverloading_ClassType();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CLASS_OVERLOADING__COMMENT = eINSTANCE.getClassOverloading_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.EnumerationImpl <em>Enumeration</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.EnumerationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getEnumeration()
+     * @generated
+     */
+    EClass ENUMERATION = eINSTANCE.getEnumeration();
+
+    /**
+     * The meta object literal for the '<em><b>Class Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ENUMERATION__CLASS_TYPE = eINSTANCE.getEnumeration_ClassType();
+
+    /**
+     * The meta object literal for the '<em><b>Ident</b></em>' attribute list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ENUMERATION__IDENT = eINSTANCE.getEnumeration_Ident();
+
+    /**
+     * The meta object literal for the '<em><b>Enum Comments</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ENUMERATION__ENUM_COMMENTS = eINSTANCE.getEnumeration_EnumComments();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ENUMERATION__COMMENT = eINSTANCE.getEnumeration_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl <em>External Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getExternalClause()
+     * @generated
+     */
+    EClass EXTERNAL_CLAUSE = eINSTANCE.getExternalClause();
+
+    /**
+     * The meta object literal for the '<em><b>Language Specification</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION = eINSTANCE.getExternalClause_LanguageSpecification();
+
+    /**
+     * The meta object literal for the '<em><b>Annotation</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXTERNAL_CLAUSE__ANNOTATION = eINSTANCE.getExternalClause_Annotation();
+
+    /**
+     * The meta object literal for the '<em><b>Ext Annotation</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXTERNAL_CLAUSE__EXT_ANNOTATION = eINSTANCE.getExternalClause_ExtAnnotation();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ElementListImpl <em>Element List</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ElementListImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementList()
+     * @generated
+     */
+    EClass ELEMENT_LIST = eINSTANCE.getElementList();
+
+    /**
+     * The meta object literal for the '<em><b>Elements</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_LIST__ELEMENTS = eINSTANCE.getElementList_Elements();
+
+    /**
+     * The meta object literal for the '<em><b>Annotations</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_LIST__ANNOTATIONS = eINSTANCE.getElementList_Annotations();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ClassElementImpl <em>Class Element</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ClassElementImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassElement()
+     * @generated
+     */
+    EClass CLASS_ELEMENT = eINSTANCE.getClassElement();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ReplaceableElementClauseImpl <em>Replaceable Element Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ReplaceableElementClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getReplaceableElementClause()
+     * @generated
+     */
+    EClass REPLACEABLE_ELEMENT_CLAUSE = eINSTANCE.getReplaceableElementClause();
+
+    /**
+     * The meta object literal for the '<em><b>Entity</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference REPLACEABLE_ELEMENT_CLAUSE__ENTITY = eINSTANCE.getReplaceableElementClause_Entity();
+
+    /**
+     * The meta object literal for the '<em><b>Constrain</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN = eINSTANCE.getReplaceableElementClause_Constrain();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ImportClauseImpl <em>Import Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ImportClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getImportClause()
+     * @generated
+     */
+    EClass IMPORT_CLAUSE = eINSTANCE.getImportClause();
+
+    /**
+     * The meta object literal for the '<em><b>As Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute IMPORT_CLAUSE__AS_NAME = eINSTANCE.getImportClause_AsName();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute IMPORT_CLAUSE__NAME = eINSTANCE.getImportClause_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference IMPORT_CLAUSE__COMMENT = eINSTANCE.getImportClause_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl <em>Extends Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getExtendsClause()
+     * @generated
+     */
+    EClass EXTENDS_CLAUSE = eINSTANCE.getExtendsClause();
+
+    /**
+     * The meta object literal for the '<em><b>Base Class</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EXTENDS_CLAUSE__BASE_CLASS = eINSTANCE.getExtendsClause_BaseClass();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXTENDS_CLAUSE__MODIFICATION = eINSTANCE.getExtendsClause_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Annotation</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXTENDS_CLAUSE__ANNOTATION = eINSTANCE.getExtendsClause_Annotation();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl <em>Constraining Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getConstrainingClause()
+     * @generated
+     */
+    EClass CONSTRAINING_CLAUSE = eINSTANCE.getConstrainingClause();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CONSTRAINING_CLAUSE__NAME = eINSTANCE.getConstrainingClause_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINING_CLAUSE__MODIFICATION = eINSTANCE.getConstrainingClause_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONSTRAINING_CLAUSE__COMMENT = eINSTANCE.getConstrainingClause_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl <em>Component Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getComponentClause()
+     * @generated
+     */
+    EClass COMPONENT_CLAUSE = eINSTANCE.getComponentClause();
+
+    /**
+     * The meta object literal for the '<em><b>Type Prefix</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute COMPONENT_CLAUSE__TYPE_PREFIX = eINSTANCE.getComponentClause_TypePrefix();
+
+    /**
+     * The meta object literal for the '<em><b>Type Specifier</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMPONENT_CLAUSE__TYPE_SPECIFIER = eINSTANCE.getComponentClause_TypeSpecifier();
+
+    /**
+     * The meta object literal for the '<em><b>Declarations</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMPONENT_CLAUSE__DECLARATIONS = eINSTANCE.getComponentClause_Declarations();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.TypeSpecifierImpl <em>Type Specifier</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.TypeSpecifierImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getTypeSpecifier()
+     * @generated
+     */
+    EClass TYPE_SPECIFIER = eINSTANCE.getTypeSpecifier();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute TYPE_SPECIFIER__NAME = eINSTANCE.getTypeSpecifier_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Subscripts</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute TYPE_SPECIFIER__SUBSCRIPTS = eINSTANCE.getTypeSpecifier_Subscripts();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl <em>Component Declaration</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getComponentDeclaration()
+     * @generated
+     */
+    EClass COMPONENT_DECLARATION = eINSTANCE.getComponentDeclaration();
+
+    /**
+     * The meta object literal for the '<em><b>Subscripts</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute COMPONENT_DECLARATION__SUBSCRIPTS = eINSTANCE.getComponentDeclaration_Subscripts();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMPONENT_DECLARATION__MODIFICATION = eINSTANCE.getComponentDeclaration_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute COMPONENT_DECLARATION__CONDITION = eINSTANCE.getComponentDeclaration_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMPONENT_DECLARATION__COMMENT = eINSTANCE.getComponentDeclaration_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ModificationImpl <em>Modification</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ModificationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getModification()
+     * @generated
+     */
+    EClass MODIFICATION = eINSTANCE.getModification();
+
+    /**
+     * The meta object literal for the '<em><b>Expression</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute MODIFICATION__EXPRESSION = eINSTANCE.getModification_Expression();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.SimpleModificationImpl <em>Simple Modification</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.SimpleModificationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getSimpleModification()
+     * @generated
+     */
+    EClass SIMPLE_MODIFICATION = eINSTANCE.getSimpleModification();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.argumentImpl <em>argument</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.argumentImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getargument()
+     * @generated
+     */
+    EClass ARGUMENT = eINSTANCE.getargument();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ElementModificationImpl <em>Element Modification</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ElementModificationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementModification()
+     * @generated
+     */
+    EClass ELEMENT_MODIFICATION = eINSTANCE.getElementModification();
+
+    /**
+     * The meta object literal for the '<em><b>Componet Ref</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ELEMENT_MODIFICATION__COMPONET_REF = eINSTANCE.getElementModification_ComponetRef();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_MODIFICATION__MODIFICATION = eINSTANCE.getElementModification_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ELEMENT_MODIFICATION__COMMENT = eINSTANCE.getElementModification_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ElementRedeclarationImpl <em>Element Redeclaration</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ElementRedeclarationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementRedeclaration()
+     * @generated
+     */
+    EClass ELEMENT_REDECLARATION = eINSTANCE.getElementRedeclaration();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ElementReplaceableClauseImpl <em>Element Replaceable Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ElementReplaceableClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementReplaceableClause()
+     * @generated
+     */
+    EClass ELEMENT_REPLACEABLE_CLAUSE = eINSTANCE.getElementReplaceableClause();
+
+    /**
+     * The meta object literal for the '<em><b>Element</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_REPLACEABLE_CLAUSE__ELEMENT = eINSTANCE.getElementReplaceableClause_Element();
+
+    /**
+     * The meta object literal for the '<em><b>Constraint</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT = eINSTANCE.getElementReplaceableClause_Constraint();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl <em>Element Component Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getElementComponentClause()
+     * @generated
+     */
+    EClass ELEMENT_COMPONENT_CLAUSE = eINSTANCE.getElementComponentClause();
+
+    /**
+     * The meta object literal for the '<em><b>Type Prefix</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX = eINSTANCE.getElementComponentClause_TypePrefix();
+
+    /**
+     * The meta object literal for the '<em><b>Type Specifier</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER = eINSTANCE.getElementComponentClause_TypeSpecifier();
+
+    /**
+     * The meta object literal for the '<em><b>Subscripts</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS = eINSTANCE.getElementComponentClause_Subscripts();
+
+    /**
+     * The meta object literal for the '<em><b>Modification</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_COMPONENT_CLAUSE__MODIFICATION = eINSTANCE.getElementComponentClause_Modification();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELEMENT_COMPONENT_CLAUSE__COMMENT = eINSTANCE.getElementComponentClause_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.EquationClauseImpl <em>Equation Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.EquationClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getEquationClause()
+     * @generated
+     */
+    EClass EQUATION_CLAUSE = eINSTANCE.getEquationClause();
+
+    /**
+     * The meta object literal for the '<em><b>Equation Rules</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EQUATION_CLAUSE__EQUATION_RULES = eINSTANCE.getEquationClause_EquationRules();
+
+    /**
+     * The meta object literal for the '<em><b>Annotations</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EQUATION_CLAUSE__ANNOTATIONS = eINSTANCE.getEquationClause_Annotations();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.algorithm_clauseImpl <em>algorithm clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.algorithm_clauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getalgorithm_clause()
+     * @generated
+     */
+    EClass ALGORITHM_CLAUSE = eINSTANCE.getalgorithm_clause();
+
+    /**
+     * The meta object literal for the '<em><b>Algorithm Rules</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ALGORITHM_CLAUSE__ALGORITHM_RULES = eINSTANCE.getalgorithm_clause_AlgorithmRules();
+
+    /**
+     * The meta object literal for the '<em><b>Annotations</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ALGORITHM_CLAUSE__ANNOTATIONS = eINSTANCE.getalgorithm_clause_Annotations();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.initial_equation_rule_clauseImpl <em>initial equation rule clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.initial_equation_rule_clauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getinitial_equation_rule_clause()
+     * @generated
+     */
+    EClass INITIAL_EQUATION_RULE_CLAUSE = eINSTANCE.getinitial_equation_rule_clause();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.initial_algorithm_clauseImpl <em>initial algorithm clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.initial_algorithm_clauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getinitial_algorithm_clause()
+     * @generated
+     */
+    EClass INITIAL_ALGORITHM_CLAUSE = eINSTANCE.getinitial_algorithm_clause();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.equation_ruleImpl <em>equation rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.equation_ruleImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getequation_rule()
+     * @generated
+     */
+    EClass EQUATION_RULE = eINSTANCE.getequation_rule();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EQUATION_RULE__COMMENT = eINSTANCE.getequation_rule_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.algorithmImpl <em>algorithm</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.algorithmImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getalgorithm()
+     * @generated
+     */
+    EClass ALGORITHM = eINSTANCE.getalgorithm();
+
+    /**
+     * The meta object literal for the '<em><b>Comment</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ALGORITHM__COMMENT = eINSTANCE.getalgorithm_Comment();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl <em>Conditional Equation Rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getConditionalEquationRule()
+     * @generated
+     */
+    EClass CONDITIONAL_EQUATION_RULE = eINSTANCE.getConditionalEquationRule();
+
+    /**
+     * The meta object literal for the '<em><b>Then Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES = eINSTANCE.getConditionalEquationRule_ThenEquationClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Elseif Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES = eINSTANCE.getConditionalEquationRule_ElseifClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Else Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES = eINSTANCE.getConditionalEquationRule_ElseEquationClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl <em>Condition Algorithm Rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getConditionAlgorithmRule()
+     * @generated
+     */
+    EClass CONDITION_ALGORITHM_RULE = eINSTANCE.getConditionAlgorithmRule();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute CONDITION_ALGORITHM_RULE__CONDITION = eINSTANCE.getConditionAlgorithmRule_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES = eINSTANCE.getConditionAlgorithmRule_ThenAlgorithmClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Elseif Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES = eINSTANCE.getConditionAlgorithmRule_ElseifClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Else Algotithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES = eINSTANCE.getConditionAlgorithmRule_ElseAlgotithmClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ForEquationClauseImpl <em>For Equation Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ForEquationClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getForEquationClause()
+     * @generated
+     */
+    EClass FOR_EQUATION_CLAUSE = eINSTANCE.getForEquationClause();
+
+    /**
+     * The meta object literal for the '<em><b>For Indices</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute FOR_EQUATION_CLAUSE__FOR_INDICES = eINSTANCE.getForEquationClause_ForIndices();
+
+    /**
+     * The meta object literal for the '<em><b>Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FOR_EQUATION_CLAUSE__EQUATION_CLAUSES = eINSTANCE.getForEquationClause_EquationClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ForAlgorithmClauseImpl <em>For Algorithm Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ForAlgorithmClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getForAlgorithmClause()
+     * @generated
+     */
+    EClass FOR_ALGORITHM_CLAUSE = eINSTANCE.getForAlgorithmClause();
+
+    /**
+     * The meta object literal for the '<em><b>For Indices</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute FOR_ALGORITHM_CLAUSE__FOR_INDICES = eINSTANCE.getForAlgorithmClause_ForIndices();
+
+    /**
+     * The meta object literal for the '<em><b>Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES = eINSTANCE.getForAlgorithmClause_AlgorithmClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.WhileClauseImpl <em>While Clause</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.WhileClauseImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getWhileClause()
+     * @generated
+     */
+    EClass WHILE_CLAUSE = eINSTANCE.getWhileClause();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute WHILE_CLAUSE__CONDITION = eINSTANCE.getWhileClause_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference WHILE_CLAUSE__ALGORITHM_CLAUSES = eINSTANCE.getWhileClause_AlgorithmClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.when_clause_eImpl <em>when clause e</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.when_clause_eImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getwhen_clause_e()
+     * @generated
+     */
+    EClass WHEN_CLAUSE_E = eINSTANCE.getwhen_clause_e();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute WHEN_CLAUSE_E__CONDITION = eINSTANCE.getwhen_clause_e_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES = eINSTANCE.getwhen_clause_e_ThenEquationClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Else When Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES = eINSTANCE.getwhen_clause_e_ElseWhenClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.else_when_eImpl <em>else when e</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.else_when_eImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getelse_when_e()
+     * @generated
+     */
+    EClass ELSE_WHEN_E = eINSTANCE.getelse_when_e();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ELSE_WHEN_E__CONDITION = eINSTANCE.getelse_when_e_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELSE_WHEN_E__THEN_EQUATION_CLAUSES = eINSTANCE.getelse_when_e_ThenEquationClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.when_clause_aImpl <em>when clause a</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.when_clause_aImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getwhen_clause_a()
+     * @generated
+     */
+    EClass WHEN_CLAUSE_A = eINSTANCE.getwhen_clause_a();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute WHEN_CLAUSE_A__CONDITION = eINSTANCE.getwhen_clause_a_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES = eINSTANCE.getwhen_clause_a_ThenAlgorithmClauses();
+
+    /**
+     * The meta object literal for the '<em><b>Else When Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES = eINSTANCE.getwhen_clause_a_ElseWhenClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.else_when_aImpl <em>else when a</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.else_when_aImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getelse_when_a()
+     * @generated
+     */
+    EClass ELSE_WHEN_A = eINSTANCE.getelse_when_a();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ELSE_WHEN_A__CONDITION = eINSTANCE.getelse_when_a_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES = eINSTANCE.getelse_when_a_ThenAlgorithmClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.equation_rule_elseifImpl <em>equation rule elseif</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.equation_rule_elseifImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getequation_rule_elseif()
+     * @generated
+     */
+    EClass EQUATION_RULE_ELSEIF = eINSTANCE.getequation_rule_elseif();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EQUATION_RULE_ELSEIF__CONDITION = eINSTANCE.getequation_rule_elseif_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Equation Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES = eINSTANCE.getequation_rule_elseif_ThenEquationClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.algorithm_elseifImpl <em>algorithm elseif</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.algorithm_elseifImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getalgorithm_elseif()
+     * @generated
+     */
+    EClass ALGORITHM_ELSEIF = eINSTANCE.getalgorithm_elseif();
+
+    /**
+     * The meta object literal for the '<em><b>Condition</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ALGORITHM_ELSEIF__CONDITION = eINSTANCE.getalgorithm_elseif_Condition();
+
+    /**
+     * The meta object literal for the '<em><b>Then Algorithm Clauses</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES = eINSTANCE.getalgorithm_elseif_ThenAlgorithmClauses();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.CommentImpl <em>Comment</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.CommentImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getComment()
+     * @generated
+     */
+    EClass COMMENT = eINSTANCE.getComment();
+
+    /**
+     * The meta object literal for the '<em><b>String</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute COMMENT__STRING = eINSTANCE.getComment_String();
+
+    /**
+     * The meta object literal for the '<em><b>Annotation</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference COMMENT__ANNOTATION = eINSTANCE.getComment_Annotation();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.AnnotationImpl <em>Annotation</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.AnnotationImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getAnnotation()
+     * @generated
+     */
+    EClass ANNOTATION = eINSTANCE.getAnnotation();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.PublicElementListImpl <em>Public Element List</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.PublicElementListImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getPublicElementList()
+     * @generated
+     */
+    EClass PUBLIC_ELEMENT_LIST = eINSTANCE.getPublicElementList();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.impl.ProtectesElementListImpl <em>Protectes Element List</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.impl.ProtectesElementListImpl
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getProtectesElementList()
+     * @generated
+     */
+    EClass PROTECTES_ELEMENT_LIST = eINSTANCE.getProtectesElementList();
+
+    /**
+     * The meta object literal for the '{@link org.modelica.xtext.modelicaBase.ClassType <em>Class Type</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.modelica.xtext.modelicaBase.ClassType
+     * @see org.modelica.xtext.modelicaBase.impl.ModelicaBasePackageImpl#getClassType()
+     * @generated
+     */
+    EEnum CLASS_TYPE = eINSTANCE.getClassType();
+
+  }
+
+} //ModelicaBasePackage
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Modification.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Modification.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/Modification.java	(revision 540)
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Modification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.Modification#getExpression <em>Expression</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getModification()
+ * @model
+ * @generated
+ */
+public interface Modification extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Expression</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Expression</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Expression</em>' attribute.
+   * @see #setExpression(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getModification_Expression()
+   * @model
+   * @generated
+   */
+  String getExpression();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.Modification#getExpression <em>Expression</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Expression</em>' attribute.
+   * @see #getExpression()
+   * @generated
+   */
+  void setExpression(String value);
+
+} // Modification
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/PartialDerivative.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/PartialDerivative.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/PartialDerivative.java	(revision 540)
@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Partial Derivative</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.PartialDerivative#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getPartialDerivative()
+ * @model
+ * @generated
+ */
+public interface PartialDerivative extends EntityDefinition
+{
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getPartialDerivative_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.PartialDerivative#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // PartialDerivative
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ProtectesElementList.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ProtectesElementList.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ProtectesElementList.java	(revision 540)
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Protectes Element List</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getProtectesElementList()
+ * @model
+ * @generated
+ */
+public interface ProtectesElementList extends ElementList
+{
+} // ProtectesElementList
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/PublicElementList.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/PublicElementList.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/PublicElementList.java	(revision 540)
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Public Element List</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getPublicElementList()
+ * @model
+ * @generated
+ */
+public interface PublicElementList extends ElementList
+{
+} // PublicElementList
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ReplaceableElementClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ReplaceableElementClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/ReplaceableElementClause.java	(revision 540)
@@ -0,0 +1,80 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Replaceable Element Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause#getEntity <em>Entity</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause#getConstrain <em>Constrain</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getReplaceableElementClause()
+ * @model
+ * @generated
+ */
+public interface ReplaceableElementClause extends ClassElement
+{
+  /**
+   * Returns the value of the '<em><b>Entity</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Entity</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>Entity</em>' containment reference.
+   * @see #setEntity(ClassElement)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getReplaceableElementClause_Entity()
+   * @model containment="true"
+   * @generated
+   */
+  ClassElement getEntity();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause#getEntity <em>Entity</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Entity</em>' containment reference.
+   * @see #getEntity()
+   * @generated
+   */
+  void setEntity(ClassElement value);
+
+  /**
+   * Returns the value of the '<em><b>Constrain</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Constrain</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>Constrain</em>' containment reference.
+   * @see #setConstrain(ConstrainingClause)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getReplaceableElementClause_Constrain()
+   * @model containment="true"
+   * @generated
+   */
+  ConstrainingClause getConstrain();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause#getConstrain <em>Constrain</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Constrain</em>' containment reference.
+   * @see #getConstrain()
+   * @generated
+   */
+  void setConstrain(ConstrainingClause value);
+
+} // ReplaceableElementClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/SimpleModification.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/SimpleModification.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/SimpleModification.java	(revision 540)
@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Simple Modification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getSimpleModification()
+ * @model
+ * @generated
+ */
+public interface SimpleModification extends Modification
+{
+} // SimpleModification
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/StorageUnit.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/StorageUnit.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/StorageUnit.java	(revision 540)
@@ -0,0 +1,46 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Storage Unit</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.StorageUnit#getClassDefinition <em>Class Definition</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getStorageUnit()
+ * @model
+ * @generated
+ */
+public interface StorageUnit extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Class Definition</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.ClassDefinition}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Class Definition</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>Class Definition</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getStorageUnit_ClassDefinition()
+   * @model containment="true"
+   * @generated
+   */
+  EList<ClassDefinition> getClassDefinition();
+
+} // StorageUnit
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/TypeSpecifier.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/TypeSpecifier.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/TypeSpecifier.java	(revision 540)
@@ -0,0 +1,81 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Type Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.TypeSpecifier#getName <em>Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.TypeSpecifier#getSubscripts <em>Subscripts</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getTypeSpecifier()
+ * @model
+ * @generated
+ */
+public interface TypeSpecifier extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>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>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getTypeSpecifier_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.TypeSpecifier#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Subscripts</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Subscripts</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Subscripts</em>' attribute.
+   * @see #setSubscripts(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getTypeSpecifier_Subscripts()
+   * @model
+   * @generated
+   */
+  String getSubscripts();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.TypeSpecifier#getSubscripts <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Subscripts</em>' attribute.
+   * @see #getSubscripts()
+   * @generated
+   */
+  void setSubscripts(String value);
+
+} // TypeSpecifier
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/WhileClause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/WhileClause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/WhileClause.java	(revision 540)
@@ -0,0 +1,71 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>While Clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.WhileClause#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.WhileClause#getAlgorithmClauses <em>Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getWhileClause()
+ * @model
+ * @generated
+ */
+public interface WhileClause extends algorithm
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getWhileClause_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.WhileClause#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Algorithm Clauses</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>Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getWhileClause_AlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm> getAlgorithmClauses();
+
+} // WhileClause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm.java	(revision 540)
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>algorithm</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.algorithm#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm()
+ * @model
+ * @generated
+ */
+public interface algorithm extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.algorithm#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // algorithm
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm_clause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm_clause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm_clause.java	(revision 540)
@@ -0,0 +1,61 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>algorithm clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.algorithm_clause#getAlgorithmRules <em>Algorithm Rules</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.algorithm_clause#getAnnotations <em>Annotations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_clause()
+ * @model
+ * @generated
+ */
+public interface algorithm_clause extends initial_algorithm_clause
+{
+  /**
+   * Returns the value of the '<em><b>Algorithm Rules</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.algorithm}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Algorithm 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>Algorithm Rules</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_clause_AlgorithmRules()
+   * @model containment="true"
+   * @generated
+   */
+  EList<algorithm> getAlgorithmRules();
+
+  /**
+   * Returns the value of the '<em><b>Annotations</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.Annotation}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Annotations</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>Annotations</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_clause_Annotations()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Annotation> getAnnotations();
+
+} // algorithm_clause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm_elseif.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm_elseif.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/algorithm_elseif.java	(revision 540)
@@ -0,0 +1,73 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>algorithm elseif</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.algorithm_elseif#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.algorithm_elseif#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_elseif()
+ * @model
+ * @generated
+ */
+public interface algorithm_elseif extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_elseif_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.algorithm_elseif#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Algorithm Clauses</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>Then Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getalgorithm_elseif_ThenAlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenAlgorithmClauses();
+
+} // algorithm_elseif
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/argument.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/argument.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/argument.java	(revision 540)
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>argument</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getargument()
+ * @model
+ * @generated
+ */
+public interface argument extends EObject
+{
+} // argument
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/else_when_a.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/else_when_a.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/else_when_a.java	(revision 540)
@@ -0,0 +1,73 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>else when a</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.else_when_a#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.else_when_a#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getelse_when_a()
+ * @model
+ * @generated
+ */
+public interface else_when_a extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getelse_when_a_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.else_when_a#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Algorithm Clauses</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>Then Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getelse_when_a_ThenAlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenAlgorithmClauses();
+
+} // else_when_a
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/else_when_e.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/else_when_e.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/else_when_e.java	(revision 540)
@@ -0,0 +1,73 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>else when e</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.else_when_e#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.else_when_e#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getelse_when_e()
+ * @model
+ * @generated
+ */
+public interface else_when_e extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getelse_when_e_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.else_when_e#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Equation Clauses</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>Then Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getelse_when_e_ThenEquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenEquationClauses();
+
+} // else_when_e
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/equation_rule.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/equation_rule.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/equation_rule.java	(revision 540)
@@ -0,0 +1,54 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>equation rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.equation_rule#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getequation_rule()
+ * @model
+ * @generated
+ */
+public interface equation_rule extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Comment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Comment</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>Comment</em>' containment reference.
+   * @see #setComment(Comment)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getequation_rule_Comment()
+   * @model containment="true"
+   * @generated
+   */
+  Comment getComment();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.equation_rule#getComment <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Comment</em>' containment reference.
+   * @see #getComment()
+   * @generated
+   */
+  void setComment(Comment value);
+
+} // equation_rule
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/equation_rule_elseif.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/equation_rule_elseif.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/equation_rule_elseif.java	(revision 540)
@@ -0,0 +1,73 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>equation rule elseif</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.equation_rule_elseif#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.equation_rule_elseif#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getequation_rule_elseif()
+ * @model
+ * @generated
+ */
+public interface equation_rule_elseif extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getequation_rule_elseif_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.equation_rule_elseif#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Equation Clauses</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>Then Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getequation_rule_elseif_ThenEquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenEquationClauses();
+
+} // equation_rule_elseif
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/AnnotationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/AnnotationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/AnnotationImpl.java	(revision 540)
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Annotation</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class AnnotationImpl extends MinimalEObjectImpl.Container implements Annotation
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected AnnotationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ANNOTATION;
+  }
+
+} //AnnotationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassDefinitionImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassDefinitionImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassDefinitionImpl.java	(revision 540)
@@ -0,0 +1,767 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ClassDefinition;
+import org.modelica.xtext.modelicaBase.ClassModification;
+import org.modelica.xtext.modelicaBase.ClassType;
+import org.modelica.xtext.modelicaBase.ElementList;
+import org.modelica.xtext.modelicaBase.EquationClause;
+import org.modelica.xtext.modelicaBase.ExternalClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.algorithm_clause;
+import org.modelica.xtext.modelicaBase.initial_algorithm_clause;
+import org.modelica.xtext.modelicaBase.initial_equation_rule_clause;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Class Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#isEncapsulated <em>Encapsulated</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#isPartial <em>Partial</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#isExpandable <em>Expandable</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getComment <em>Comment</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getElemList <em>Elem List</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getInitialEquationClauses <em>Initial Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getInitialAlgorithmClauses <em>Initial Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getEquationClauses <em>Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getAlgorithmClauses <em>Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassDefinitionImpl#getExtClause <em>Ext Clause</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ClassDefinitionImpl extends EntityDefinitionImpl implements ClassDefinition
+{
+  /**
+   * The default value of the '{@link #isEncapsulated() <em>Encapsulated</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isEncapsulated()
+   * @generated
+   * @ordered
+   */
+  protected static final boolean ENCAPSULATED_EDEFAULT = false;
+
+  /**
+   * The cached value of the '{@link #isEncapsulated() <em>Encapsulated</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isEncapsulated()
+   * @generated
+   * @ordered
+   */
+  protected boolean encapsulated = ENCAPSULATED_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #isPartial() <em>Partial</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isPartial()
+   * @generated
+   * @ordered
+   */
+  protected static final boolean PARTIAL_EDEFAULT = false;
+
+  /**
+   * The cached value of the '{@link #isPartial() <em>Partial</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isPartial()
+   * @generated
+   * @ordered
+   */
+  protected boolean partial = PARTIAL_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #isExpandable() <em>Expandable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isExpandable()
+   * @generated
+   * @ordered
+   */
+  protected static final boolean EXPANDABLE_EDEFAULT = false;
+
+  /**
+   * The cached value of the '{@link #isExpandable() <em>Expandable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isExpandable()
+   * @generated
+   * @ordered
+   */
+  protected boolean expandable = EXPANDABLE_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected static final ClassType CLASS_TYPE_EDEFAULT = ClassType.CLASS;
+
+  /**
+   * The cached value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected ClassType classType = CLASS_TYPE_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getComment() <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected static final String COMMENT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected String comment = COMMENT_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected ClassModification modification;
+
+  /**
+   * The cached value of the '{@link #getElemList() <em>Elem List</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElemList()
+   * @generated
+   * @ordered
+   */
+  protected EList<ElementList> elemList;
+
+  /**
+   * The cached value of the '{@link #getInitialEquationClauses() <em>Initial Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getInitialEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<initial_equation_rule_clause> initialEquationClauses;
+
+  /**
+   * The cached value of the '{@link #getInitialAlgorithmClauses() <em>Initial Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getInitialAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<initial_algorithm_clause> initialAlgorithmClauses;
+
+  /**
+   * The cached value of the '{@link #getEquationClauses() <em>Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<EquationClause> equationClauses;
+
+  /**
+   * The cached value of the '{@link #getAlgorithmClauses() <em>Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm_clause> algorithmClauses;
+
+  /**
+   * The cached value of the '{@link #getExtClause() <em>Ext Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExtClause()
+   * @generated
+   * @ordered
+   */
+  protected ExternalClause extClause;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ClassDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CLASS_DEFINITION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isEncapsulated()
+  {
+    return encapsulated;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setEncapsulated(boolean newEncapsulated)
+  {
+    boolean oldEncapsulated = encapsulated;
+    encapsulated = newEncapsulated;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__ENCAPSULATED, oldEncapsulated, encapsulated));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isPartial()
+  {
+    return partial;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setPartial(boolean newPartial)
+  {
+    boolean oldPartial = partial;
+    partial = newPartial;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__PARTIAL, oldPartial, partial));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isExpandable()
+  {
+    return expandable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExpandable(boolean newExpandable)
+  {
+    boolean oldExpandable = expandable;
+    expandable = newExpandable;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__EXPANDABLE, oldExpandable, expandable));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassType getClassType()
+  {
+    return classType;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setClassType(ClassType newClassType)
+  {
+    ClassType oldClassType = classType;
+    classType = newClassType == null ? CLASS_TYPE_EDEFAULT : newClassType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__CLASS_TYPE, oldClassType, classType));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(String newComment)
+  {
+    String oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__COMMENT, oldComment, comment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassModification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(ClassModification newModification, NotificationChain msgs)
+  {
+    ClassModification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(ClassModification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<ElementList> getElemList()
+  {
+    if (elemList == null)
+    {
+      elemList = new EObjectContainmentEList<ElementList>(ElementList.class, this, ModelicaBasePackage.CLASS_DEFINITION__ELEM_LIST);
+    }
+    return elemList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<initial_equation_rule_clause> getInitialEquationClauses()
+  {
+    if (initialEquationClauses == null)
+    {
+      initialEquationClauses = new EObjectContainmentEList<initial_equation_rule_clause>(initial_equation_rule_clause.class, this, ModelicaBasePackage.CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES);
+    }
+    return initialEquationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<initial_algorithm_clause> getInitialAlgorithmClauses()
+  {
+    if (initialAlgorithmClauses == null)
+    {
+      initialAlgorithmClauses = new EObjectContainmentEList<initial_algorithm_clause>(initial_algorithm_clause.class, this, ModelicaBasePackage.CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES);
+    }
+    return initialAlgorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<EquationClause> getEquationClauses()
+  {
+    if (equationClauses == null)
+    {
+      equationClauses = new EObjectContainmentEList<EquationClause>(EquationClause.class, this, ModelicaBasePackage.CLASS_DEFINITION__EQUATION_CLAUSES);
+    }
+    return equationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm_clause> getAlgorithmClauses()
+  {
+    if (algorithmClauses == null)
+    {
+      algorithmClauses = new EObjectContainmentEList<algorithm_clause>(algorithm_clause.class, this, ModelicaBasePackage.CLASS_DEFINITION__ALGORITHM_CLAUSES);
+    }
+    return algorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ExternalClause getExtClause()
+  {
+    return extClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetExtClause(ExternalClause newExtClause, NotificationChain msgs)
+  {
+    ExternalClause oldExtClause = extClause;
+    extClause = newExtClause;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE, oldExtClause, newExtClause);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExtClause(ExternalClause newExtClause)
+  {
+    if (newExtClause != extClause)
+    {
+      NotificationChain msgs = null;
+      if (extClause != null)
+        msgs = ((InternalEObject)extClause).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE, null, msgs);
+      if (newExtClause != null)
+        msgs = ((InternalEObject)newExtClause).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE, null, msgs);
+      msgs = basicSetExtClause(newExtClause, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE, newExtClause, newExtClause));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION:
+        return basicSetModification(null, msgs);
+      case ModelicaBasePackage.CLASS_DEFINITION__ELEM_LIST:
+        return ((InternalEList<?>)getElemList()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES:
+        return ((InternalEList<?>)getInitialEquationClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getInitialAlgorithmClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CLASS_DEFINITION__EQUATION_CLAUSES:
+        return ((InternalEList<?>)getEquationClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CLASS_DEFINITION__ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getAlgorithmClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE:
+        return basicSetExtClause(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 ModelicaBasePackage.CLASS_DEFINITION__ENCAPSULATED:
+        return isEncapsulated();
+      case ModelicaBasePackage.CLASS_DEFINITION__PARTIAL:
+        return isPartial();
+      case ModelicaBasePackage.CLASS_DEFINITION__EXPANDABLE:
+        return isExpandable();
+      case ModelicaBasePackage.CLASS_DEFINITION__CLASS_TYPE:
+        return getClassType();
+      case ModelicaBasePackage.CLASS_DEFINITION__COMMENT:
+        return getComment();
+      case ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.CLASS_DEFINITION__ELEM_LIST:
+        return getElemList();
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES:
+        return getInitialEquationClauses();
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES:
+        return getInitialAlgorithmClauses();
+      case ModelicaBasePackage.CLASS_DEFINITION__EQUATION_CLAUSES:
+        return getEquationClauses();
+      case ModelicaBasePackage.CLASS_DEFINITION__ALGORITHM_CLAUSES:
+        return getAlgorithmClauses();
+      case ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE:
+        return getExtClause();
+    }
+    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 ModelicaBasePackage.CLASS_DEFINITION__ENCAPSULATED:
+        setEncapsulated((Boolean)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__PARTIAL:
+        setPartial((Boolean)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__EXPANDABLE:
+        setExpandable((Boolean)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__CLASS_TYPE:
+        setClassType((ClassType)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__COMMENT:
+        setComment((String)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION:
+        setModification((ClassModification)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__ELEM_LIST:
+        getElemList().clear();
+        getElemList().addAll((Collection<? extends ElementList>)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES:
+        getInitialEquationClauses().clear();
+        getInitialEquationClauses().addAll((Collection<? extends initial_equation_rule_clause>)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES:
+        getInitialAlgorithmClauses().clear();
+        getInitialAlgorithmClauses().addAll((Collection<? extends initial_algorithm_clause>)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__EQUATION_CLAUSES:
+        getEquationClauses().clear();
+        getEquationClauses().addAll((Collection<? extends EquationClause>)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__ALGORITHM_CLAUSES:
+        getAlgorithmClauses().clear();
+        getAlgorithmClauses().addAll((Collection<? extends algorithm_clause>)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE:
+        setExtClause((ExternalClause)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_DEFINITION__ENCAPSULATED:
+        setEncapsulated(ENCAPSULATED_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__PARTIAL:
+        setPartial(PARTIAL_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__EXPANDABLE:
+        setExpandable(EXPANDABLE_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__CLASS_TYPE:
+        setClassType(CLASS_TYPE_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__COMMENT:
+        setComment(COMMENT_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION:
+        setModification((ClassModification)null);
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__ELEM_LIST:
+        getElemList().clear();
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES:
+        getInitialEquationClauses().clear();
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES:
+        getInitialAlgorithmClauses().clear();
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__EQUATION_CLAUSES:
+        getEquationClauses().clear();
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__ALGORITHM_CLAUSES:
+        getAlgorithmClauses().clear();
+        return;
+      case ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE:
+        setExtClause((ExternalClause)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_DEFINITION__ENCAPSULATED:
+        return encapsulated != ENCAPSULATED_EDEFAULT;
+      case ModelicaBasePackage.CLASS_DEFINITION__PARTIAL:
+        return partial != PARTIAL_EDEFAULT;
+      case ModelicaBasePackage.CLASS_DEFINITION__EXPANDABLE:
+        return expandable != EXPANDABLE_EDEFAULT;
+      case ModelicaBasePackage.CLASS_DEFINITION__CLASS_TYPE:
+        return classType != CLASS_TYPE_EDEFAULT;
+      case ModelicaBasePackage.CLASS_DEFINITION__COMMENT:
+        return COMMENT_EDEFAULT == null ? comment != null : !COMMENT_EDEFAULT.equals(comment);
+      case ModelicaBasePackage.CLASS_DEFINITION__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.CLASS_DEFINITION__ELEM_LIST:
+        return elemList != null && !elemList.isEmpty();
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES:
+        return initialEquationClauses != null && !initialEquationClauses.isEmpty();
+      case ModelicaBasePackage.CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES:
+        return initialAlgorithmClauses != null && !initialAlgorithmClauses.isEmpty();
+      case ModelicaBasePackage.CLASS_DEFINITION__EQUATION_CLAUSES:
+        return equationClauses != null && !equationClauses.isEmpty();
+      case ModelicaBasePackage.CLASS_DEFINITION__ALGORITHM_CLAUSES:
+        return algorithmClauses != null && !algorithmClauses.isEmpty();
+      case ModelicaBasePackage.CLASS_DEFINITION__EXT_CLAUSE:
+        return extClause != 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(" (encapsulated: ");
+    result.append(encapsulated);
+    result.append(", partial: ");
+    result.append(partial);
+    result.append(", expandable: ");
+    result.append(expandable);
+    result.append(", classType: ");
+    result.append(classType);
+    result.append(", comment: ");
+    result.append(comment);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ClassDefinitionImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassElementImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassElementImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassElementImpl.java	(revision 540)
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.modelica.xtext.modelicaBase.ClassElement;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Class Element</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ClassElementImpl extends MinimalEObjectImpl.Container implements ClassElement
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ClassElementImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CLASS_ELEMENT;
+  }
+
+} //ClassElementImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassModificationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassModificationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassModificationImpl.java	(revision 540)
@@ -0,0 +1,568 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ClassModification;
+import org.modelica.xtext.modelicaBase.ClassType;
+import org.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.Modification;
+import org.modelica.xtext.modelicaBase.TypeSpecifier;
+import org.modelica.xtext.modelicaBase.argument;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Class Modification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl#getExpression <em>Expression</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl#getTypeSpecifier <em>Type Specifier</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl#getComment <em>Comment</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassModificationImpl#getArguments <em>Arguments</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ClassModificationImpl extends EntityDefinitionImpl implements ClassModification
+{
+  /**
+   * The default value of the '{@link #getExpression() <em>Expression</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExpression()
+   * @generated
+   * @ordered
+   */
+  protected static final String EXPRESSION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getExpression() <em>Expression</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExpression()
+   * @generated
+   * @ordered
+   */
+  protected String expression = EXPRESSION_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected static final ClassType CLASS_TYPE_EDEFAULT = ClassType.CLASS;
+
+  /**
+   * The cached value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected ClassType classType = CLASS_TYPE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getTypeSpecifier() <em>Type Specifier</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypeSpecifier()
+   * @generated
+   * @ordered
+   */
+  protected TypeSpecifier typeSpecifier;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected ClassModification modification;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * The cached value of the '{@link #getArguments() <em>Arguments</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getArguments()
+   * @generated
+   * @ordered
+   */
+  protected EList<argument> arguments;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ClassModificationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CLASS_MODIFICATION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getExpression()
+  {
+    return expression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExpression(String newExpression)
+  {
+    String oldExpression = expression;
+    expression = newExpression;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION, oldExpression, expression));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassType getClassType()
+  {
+    return classType;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setClassType(ClassType newClassType)
+  {
+    ClassType oldClassType = classType;
+    classType = newClassType == null ? CLASS_TYPE_EDEFAULT : newClassType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__CLASS_TYPE, oldClassType, classType));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TypeSpecifier getTypeSpecifier()
+  {
+    return typeSpecifier;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTypeSpecifier(TypeSpecifier newTypeSpecifier, NotificationChain msgs)
+  {
+    TypeSpecifier oldTypeSpecifier = typeSpecifier;
+    typeSpecifier = newTypeSpecifier;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER, oldTypeSpecifier, newTypeSpecifier);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTypeSpecifier(TypeSpecifier newTypeSpecifier)
+  {
+    if (newTypeSpecifier != typeSpecifier)
+    {
+      NotificationChain msgs = null;
+      if (typeSpecifier != null)
+        msgs = ((InternalEObject)typeSpecifier).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER, null, msgs);
+      if (newTypeSpecifier != null)
+        msgs = ((InternalEObject)newTypeSpecifier).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER, null, msgs);
+      msgs = basicSetTypeSpecifier(newTypeSpecifier, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER, newTypeSpecifier, newTypeSpecifier));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassModification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(ClassModification newModification, NotificationChain msgs)
+  {
+    ClassModification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(ClassModification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_MODIFICATION__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_MODIFICATION__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_MODIFICATION__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<argument> getArguments()
+  {
+    if (arguments == null)
+    {
+      arguments = new EObjectContainmentEList<argument>(argument.class, this, ModelicaBasePackage.CLASS_MODIFICATION__ARGUMENTS);
+    }
+    return arguments;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER:
+        return basicSetTypeSpecifier(null, msgs);
+      case ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION:
+        return basicSetModification(null, msgs);
+      case ModelicaBasePackage.CLASS_MODIFICATION__COMMENT:
+        return basicSetComment(null, msgs);
+      case ModelicaBasePackage.CLASS_MODIFICATION__ARGUMENTS:
+        return ((InternalEList<?>)getArguments()).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 ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION:
+        return getExpression();
+      case ModelicaBasePackage.CLASS_MODIFICATION__CLASS_TYPE:
+        return getClassType();
+      case ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER:
+        return getTypeSpecifier();
+      case ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.CLASS_MODIFICATION__COMMENT:
+        return getComment();
+      case ModelicaBasePackage.CLASS_MODIFICATION__ARGUMENTS:
+        return getArguments();
+    }
+    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 ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION:
+        setExpression((String)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__CLASS_TYPE:
+        setClassType((ClassType)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER:
+        setTypeSpecifier((TypeSpecifier)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION:
+        setModification((ClassModification)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__COMMENT:
+        setComment((Comment)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__ARGUMENTS:
+        getArguments().clear();
+        getArguments().addAll((Collection<? extends argument>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION:
+        setExpression(EXPRESSION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__CLASS_TYPE:
+        setClassType(CLASS_TYPE_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER:
+        setTypeSpecifier((TypeSpecifier)null);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION:
+        setModification((ClassModification)null);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__COMMENT:
+        setComment((Comment)null);
+        return;
+      case ModelicaBasePackage.CLASS_MODIFICATION__ARGUMENTS:
+        getArguments().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION:
+        return EXPRESSION_EDEFAULT == null ? expression != null : !EXPRESSION_EDEFAULT.equals(expression);
+      case ModelicaBasePackage.CLASS_MODIFICATION__CLASS_TYPE:
+        return classType != CLASS_TYPE_EDEFAULT;
+      case ModelicaBasePackage.CLASS_MODIFICATION__TYPE_SPECIFIER:
+        return typeSpecifier != null;
+      case ModelicaBasePackage.CLASS_MODIFICATION__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.CLASS_MODIFICATION__COMMENT:
+        return comment != null;
+      case ModelicaBasePackage.CLASS_MODIFICATION__ARGUMENTS:
+        return arguments != null && !arguments.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+  {
+    if (baseClass == Modification.class)
+    {
+      switch (derivedFeatureID)
+      {
+        case ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION: return ModelicaBasePackage.MODIFICATION__EXPRESSION;
+        default: return -1;
+      }
+    }
+    if (baseClass == Annotation.class)
+    {
+      switch (derivedFeatureID)
+      {
+        default: return -1;
+      }
+    }
+    return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+  {
+    if (baseClass == Modification.class)
+    {
+      switch (baseFeatureID)
+      {
+        case ModelicaBasePackage.MODIFICATION__EXPRESSION: return ModelicaBasePackage.CLASS_MODIFICATION__EXPRESSION;
+        default: return -1;
+      }
+    }
+    if (baseClass == Annotation.class)
+    {
+      switch (baseFeatureID)
+      {
+        default: return -1;
+      }
+    }
+    return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (expression: ");
+    result.append(expression);
+    result.append(", classType: ");
+    result.append(classType);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ClassModificationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassOverloadingImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassOverloadingImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ClassOverloadingImpl.java	(revision 540)
@@ -0,0 +1,268 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ClassOverloading;
+import org.modelica.xtext.modelicaBase.ClassType;
+import org.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Class Overloading</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassOverloadingImpl#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ClassOverloadingImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ClassOverloadingImpl extends EntityDefinitionImpl implements ClassOverloading
+{
+  /**
+   * The default value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected static final ClassType CLASS_TYPE_EDEFAULT = ClassType.CLASS;
+
+  /**
+   * The cached value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected ClassType classType = CLASS_TYPE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ClassOverloadingImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CLASS_OVERLOADING;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassType getClassType()
+  {
+    return classType;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setClassType(ClassType newClassType)
+  {
+    ClassType oldClassType = classType;
+    classType = newClassType == null ? CLASS_TYPE_EDEFAULT : newClassType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_OVERLOADING__CLASS_TYPE, oldClassType, classType));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_OVERLOADING__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_OVERLOADING__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CLASS_OVERLOADING__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CLASS_OVERLOADING__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_OVERLOADING__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.CLASS_OVERLOADING__CLASS_TYPE:
+        return getClassType();
+      case ModelicaBasePackage.CLASS_OVERLOADING__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_OVERLOADING__CLASS_TYPE:
+        setClassType((ClassType)newValue);
+        return;
+      case ModelicaBasePackage.CLASS_OVERLOADING__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_OVERLOADING__CLASS_TYPE:
+        setClassType(CLASS_TYPE_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CLASS_OVERLOADING__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CLASS_OVERLOADING__CLASS_TYPE:
+        return classType != CLASS_TYPE_EDEFAULT;
+      case ModelicaBasePackage.CLASS_OVERLOADING__COMMENT:
+        return comment != 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(" (classType: ");
+    result.append(classType);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ClassOverloadingImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/CommentImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/CommentImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/CommentImpl.java	(revision 540)
@@ -0,0 +1,268 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Comment</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.CommentImpl#getString <em>String</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.CommentImpl#getAnnotation <em>Annotation</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CommentImpl extends MinimalEObjectImpl.Container implements Comment
+{
+  /**
+   * The default value of the '{@link #getString() <em>String</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getString()
+   * @generated
+   * @ordered
+   */
+  protected static final String STRING_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getString() <em>String</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getString()
+   * @generated
+   * @ordered
+   */
+  protected String string = STRING_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getAnnotation() <em>Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAnnotation()
+   * @generated
+   * @ordered
+   */
+  protected Annotation annotation;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected CommentImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.COMMENT;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getString()
+  {
+    return string;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setString(String newString)
+  {
+    String oldString = string;
+    string = newString;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMMENT__STRING, oldString, string));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Annotation getAnnotation()
+  {
+    return annotation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAnnotation(Annotation newAnnotation, NotificationChain msgs)
+  {
+    Annotation oldAnnotation = annotation;
+    annotation = newAnnotation;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMMENT__ANNOTATION, oldAnnotation, newAnnotation);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAnnotation(Annotation newAnnotation)
+  {
+    if (newAnnotation != annotation)
+    {
+      NotificationChain msgs = null;
+      if (annotation != null)
+        msgs = ((InternalEObject)annotation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMMENT__ANNOTATION, null, msgs);
+      if (newAnnotation != null)
+        msgs = ((InternalEObject)newAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMMENT__ANNOTATION, null, msgs);
+      msgs = basicSetAnnotation(newAnnotation, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMMENT__ANNOTATION, newAnnotation, newAnnotation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMMENT__ANNOTATION:
+        return basicSetAnnotation(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 ModelicaBasePackage.COMMENT__STRING:
+        return getString();
+      case ModelicaBasePackage.COMMENT__ANNOTATION:
+        return getAnnotation();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMMENT__STRING:
+        setString((String)newValue);
+        return;
+      case ModelicaBasePackage.COMMENT__ANNOTATION:
+        setAnnotation((Annotation)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMMENT__STRING:
+        setString(STRING_EDEFAULT);
+        return;
+      case ModelicaBasePackage.COMMENT__ANNOTATION:
+        setAnnotation((Annotation)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMMENT__STRING:
+        return STRING_EDEFAULT == null ? string != null : !STRING_EDEFAULT.equals(string);
+      case ModelicaBasePackage.COMMENT__ANNOTATION:
+        return annotation != 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(" (string: ");
+    result.append(string);
+    result.append(')');
+    return result.toString();
+  }
+
+} //CommentImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ComponentClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ComponentClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ComponentClauseImpl.java	(revision 540)
@@ -0,0 +1,314 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ComponentClause;
+import org.modelica.xtext.modelicaBase.ComponentDeclaration;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.TypeSpecifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Component Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl#getTypePrefix <em>Type Prefix</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl#getTypeSpecifier <em>Type Specifier</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentClauseImpl#getDeclarations <em>Declarations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ComponentClauseImpl extends ClassElementImpl implements ComponentClause
+{
+  /**
+   * The default value of the '{@link #getTypePrefix() <em>Type Prefix</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypePrefix()
+   * @generated
+   * @ordered
+   */
+  protected static final String TYPE_PREFIX_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getTypePrefix() <em>Type Prefix</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypePrefix()
+   * @generated
+   * @ordered
+   */
+  protected String typePrefix = TYPE_PREFIX_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getTypeSpecifier() <em>Type Specifier</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypeSpecifier()
+   * @generated
+   * @ordered
+   */
+  protected TypeSpecifier typeSpecifier;
+
+  /**
+   * The cached value of the '{@link #getDeclarations() <em>Declarations</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDeclarations()
+   * @generated
+   * @ordered
+   */
+  protected EList<ComponentDeclaration> declarations;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ComponentClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.COMPONENT_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getTypePrefix()
+  {
+    return typePrefix;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTypePrefix(String newTypePrefix)
+  {
+    String oldTypePrefix = typePrefix;
+    typePrefix = newTypePrefix;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_PREFIX, oldTypePrefix, typePrefix));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TypeSpecifier getTypeSpecifier()
+  {
+    return typeSpecifier;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTypeSpecifier(TypeSpecifier newTypeSpecifier, NotificationChain msgs)
+  {
+    TypeSpecifier oldTypeSpecifier = typeSpecifier;
+    typeSpecifier = newTypeSpecifier;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER, oldTypeSpecifier, newTypeSpecifier);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTypeSpecifier(TypeSpecifier newTypeSpecifier)
+  {
+    if (newTypeSpecifier != typeSpecifier)
+    {
+      NotificationChain msgs = null;
+      if (typeSpecifier != null)
+        msgs = ((InternalEObject)typeSpecifier).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER, null, msgs);
+      if (newTypeSpecifier != null)
+        msgs = ((InternalEObject)newTypeSpecifier).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER, null, msgs);
+      msgs = basicSetTypeSpecifier(newTypeSpecifier, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER, newTypeSpecifier, newTypeSpecifier));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<ComponentDeclaration> getDeclarations()
+  {
+    if (declarations == null)
+    {
+      declarations = new EObjectContainmentEList<ComponentDeclaration>(ComponentDeclaration.class, this, ModelicaBasePackage.COMPONENT_CLAUSE__DECLARATIONS);
+    }
+    return declarations;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        return basicSetTypeSpecifier(null, msgs);
+      case ModelicaBasePackage.COMPONENT_CLAUSE__DECLARATIONS:
+        return ((InternalEList<?>)getDeclarations()).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 ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_PREFIX:
+        return getTypePrefix();
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        return getTypeSpecifier();
+      case ModelicaBasePackage.COMPONENT_CLAUSE__DECLARATIONS:
+        return getDeclarations();
+    }
+    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 ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_PREFIX:
+        setTypePrefix((String)newValue);
+        return;
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        setTypeSpecifier((TypeSpecifier)newValue);
+        return;
+      case ModelicaBasePackage.COMPONENT_CLAUSE__DECLARATIONS:
+        getDeclarations().clear();
+        getDeclarations().addAll((Collection<? extends ComponentDeclaration>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_PREFIX:
+        setTypePrefix(TYPE_PREFIX_EDEFAULT);
+        return;
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        setTypeSpecifier((TypeSpecifier)null);
+        return;
+      case ModelicaBasePackage.COMPONENT_CLAUSE__DECLARATIONS:
+        getDeclarations().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_PREFIX:
+        return TYPE_PREFIX_EDEFAULT == null ? typePrefix != null : !TYPE_PREFIX_EDEFAULT.equals(typePrefix);
+      case ModelicaBasePackage.COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        return typeSpecifier != null;
+      case ModelicaBasePackage.COMPONENT_CLAUSE__DECLARATIONS:
+        return declarations != null && !declarations.isEmpty();
+    }
+    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(" (typePrefix: ");
+    result.append(typePrefix);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ComponentClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ComponentDeclarationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ComponentDeclarationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ComponentDeclarationImpl.java	(revision 540)
@@ -0,0 +1,396 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ComponentDeclaration;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.Modification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Component Declaration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl#getSubscripts <em>Subscripts</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ComponentDeclarationImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ComponentDeclarationImpl extends MinimalEObjectImpl.Container implements ComponentDeclaration
+{
+  /**
+   * The default value of the '{@link #getSubscripts() <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSubscripts()
+   * @generated
+   * @ordered
+   */
+  protected static final String SUBSCRIPTS_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getSubscripts() <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSubscripts()
+   * @generated
+   * @ordered
+   */
+  protected String subscripts = SUBSCRIPTS_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected Modification modification;
+
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ComponentDeclarationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.COMPONENT_DECLARATION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getSubscripts()
+  {
+    return subscripts;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSubscripts(String newSubscripts)
+  {
+    String oldSubscripts = subscripts;
+    subscripts = newSubscripts;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_DECLARATION__SUBSCRIPTS, oldSubscripts, subscripts));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Modification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(Modification newModification, NotificationChain msgs)
+  {
+    Modification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(Modification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_DECLARATION__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION:
+        return basicSetModification(null, msgs);
+      case ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.COMPONENT_DECLARATION__SUBSCRIPTS:
+        return getSubscripts();
+      case ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.COMPONENT_DECLARATION__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_DECLARATION__SUBSCRIPTS:
+        setSubscripts((String)newValue);
+        return;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION:
+        setModification((Modification)newValue);
+        return;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_DECLARATION__SUBSCRIPTS:
+        setSubscripts(SUBSCRIPTS_EDEFAULT);
+        return;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION:
+        setModification((Modification)null);
+        return;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.COMPONENT_DECLARATION__SUBSCRIPTS:
+        return SUBSCRIPTS_EDEFAULT == null ? subscripts != null : !SUBSCRIPTS_EDEFAULT.equals(subscripts);
+      case ModelicaBasePackage.COMPONENT_DECLARATION__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.COMPONENT_DECLARATION__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.COMPONENT_DECLARATION__COMMENT:
+        return comment != 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(" (subscripts: ");
+    result.append(subscripts);
+    result.append(", condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ComponentDeclarationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConditionAlgorithmRuleImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConditionAlgorithmRuleImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConditionAlgorithmRuleImpl.java	(revision 540)
@@ -0,0 +1,319 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ConditionAlgorithmRule;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.algorithm;
+import org.modelica.xtext.modelicaBase.algorithm_elseif;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Condition Algorithm Rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl#getElseifClauses <em>Elseif Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionAlgorithmRuleImpl#getElseAlgotithmClauses <em>Else Algotithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ConditionAlgorithmRuleImpl extends algorithmImpl implements ConditionAlgorithmRule
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenAlgorithmClauses() <em>Then Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm> thenAlgorithmClauses;
+
+  /**
+   * The cached value of the '{@link #getElseifClauses() <em>Elseif Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElseifClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm_elseif> elseifClauses;
+
+  /**
+   * The cached value of the '{@link #getElseAlgotithmClauses() <em>Else Algotithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElseAlgotithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm> elseAlgotithmClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ConditionAlgorithmRuleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CONDITION_ALGORITHM_RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CONDITION_ALGORITHM_RULE__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm> getThenAlgorithmClauses()
+  {
+    if (thenAlgorithmClauses == null)
+    {
+      thenAlgorithmClauses = new EObjectContainmentEList<algorithm>(algorithm.class, this, ModelicaBasePackage.CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES);
+    }
+    return thenAlgorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm_elseif> getElseifClauses()
+  {
+    if (elseifClauses == null)
+    {
+      elseifClauses = new EObjectContainmentEList<algorithm_elseif>(algorithm_elseif.class, this, ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES);
+    }
+    return elseifClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm> getElseAlgotithmClauses()
+  {
+    if (elseAlgotithmClauses == null)
+    {
+      elseAlgotithmClauses = new EObjectContainmentEList<algorithm>(algorithm.class, this, ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES);
+    }
+    return elseAlgotithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getThenAlgorithmClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES:
+        return ((InternalEList<?>)getElseifClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES:
+        return ((InternalEList<?>)getElseAlgotithmClauses()).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 ModelicaBasePackage.CONDITION_ALGORITHM_RULE__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES:
+        return getThenAlgorithmClauses();
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES:
+        return getElseifClauses();
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES:
+        return getElseAlgotithmClauses();
+    }
+    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 ModelicaBasePackage.CONDITION_ALGORITHM_RULE__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        getThenAlgorithmClauses().addAll((Collection<? extends algorithm>)newValue);
+        return;
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES:
+        getElseifClauses().clear();
+        getElseifClauses().addAll((Collection<? extends algorithm_elseif>)newValue);
+        return;
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES:
+        getElseAlgotithmClauses().clear();
+        getElseAlgotithmClauses().addAll((Collection<? extends algorithm>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        return;
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES:
+        getElseifClauses().clear();
+        return;
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES:
+        getElseAlgotithmClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES:
+        return thenAlgorithmClauses != null && !thenAlgorithmClauses.isEmpty();
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES:
+        return elseifClauses != null && !elseifClauses.isEmpty();
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES:
+        return elseAlgotithmClauses != null && !elseAlgotithmClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ConditionAlgorithmRuleImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConditionalEquationRuleImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConditionalEquationRuleImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConditionalEquationRuleImpl.java	(revision 540)
@@ -0,0 +1,245 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ConditionalEquationRule;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.equation_rule;
+import org.modelica.xtext.modelicaBase.equation_rule_elseif;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Conditional Equation Rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl#getElseifClauses <em>Elseif Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConditionalEquationRuleImpl#getElseEquationClauses <em>Else Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ConditionalEquationRuleImpl extends equation_ruleImpl implements ConditionalEquationRule
+{
+  /**
+   * The cached value of the '{@link #getThenEquationClauses() <em>Then Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenEquationClauses;
+
+  /**
+   * The cached value of the '{@link #getElseifClauses() <em>Elseif Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElseifClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule_elseif> elseifClauses;
+
+  /**
+   * The cached value of the '{@link #getElseEquationClauses() <em>Else Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElseEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> elseEquationClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ConditionalEquationRuleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CONDITIONAL_EQUATION_RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenEquationClauses()
+  {
+    if (thenEquationClauses == null)
+    {
+      thenEquationClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES);
+    }
+    return thenEquationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule_elseif> getElseifClauses()
+  {
+    if (elseifClauses == null)
+    {
+      elseifClauses = new EObjectContainmentEList<equation_rule_elseif>(equation_rule_elseif.class, this, ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES);
+    }
+    return elseifClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getElseEquationClauses()
+  {
+    if (elseEquationClauses == null)
+    {
+      elseEquationClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES);
+    }
+    return elseEquationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES:
+        return ((InternalEList<?>)getThenEquationClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES:
+        return ((InternalEList<?>)getElseifClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES:
+        return ((InternalEList<?>)getElseEquationClauses()).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 ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES:
+        return getThenEquationClauses();
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES:
+        return getElseifClauses();
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES:
+        return getElseEquationClauses();
+    }
+    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 ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        getThenEquationClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES:
+        getElseifClauses().clear();
+        getElseifClauses().addAll((Collection<? extends equation_rule_elseif>)newValue);
+        return;
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES:
+        getElseEquationClauses().clear();
+        getElseEquationClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        return;
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES:
+        getElseifClauses().clear();
+        return;
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES:
+        getElseEquationClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES:
+        return thenEquationClauses != null && !thenEquationClauses.isEmpty();
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES:
+        return elseifClauses != null && !elseifClauses.isEmpty();
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES:
+        return elseEquationClauses != null && !elseEquationClauses.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ConditionalEquationRuleImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConstrainingClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConstrainingClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ConstrainingClauseImpl.java	(revision 540)
@@ -0,0 +1,340 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ClassModification;
+import org.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ConstrainingClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Constraining Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ConstrainingClauseImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ConstrainingClauseImpl extends MinimalEObjectImpl.Container implements ConstrainingClause
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected ClassModification modification;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ConstrainingClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.CONSTRAINING_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CONSTRAINING_CLAUSE__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassModification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(ClassModification newModification, NotificationChain msgs)
+  {
+    ClassModification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(ClassModification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION:
+        return basicSetModification(null, msgs);
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.CONSTRAINING_CLAUSE__NAME:
+        return getName();
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__NAME:
+        setName((String)newValue);
+        return;
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION:
+        setModification((ClassModification)newValue);
+        return;
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION:
+        setModification((ClassModification)null);
+        return;
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE__COMMENT:
+        return comment != 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(" (name: ");
+    result.append(name);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ConstrainingClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementComponentClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementComponentClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementComponentClauseImpl.java	(revision 540)
@@ -0,0 +1,467 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ElementComponentClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.Modification;
+import org.modelica.xtext.modelicaBase.TypeSpecifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element Component Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl#getTypePrefix <em>Type Prefix</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl#getTypeSpecifier <em>Type Specifier</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl#getSubscripts <em>Subscripts</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementComponentClauseImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ElementComponentClauseImpl extends ElementRedeclarationImpl implements ElementComponentClause
+{
+  /**
+   * The default value of the '{@link #getTypePrefix() <em>Type Prefix</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypePrefix()
+   * @generated
+   * @ordered
+   */
+  protected static final String TYPE_PREFIX_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getTypePrefix() <em>Type Prefix</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypePrefix()
+   * @generated
+   * @ordered
+   */
+  protected String typePrefix = TYPE_PREFIX_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getTypeSpecifier() <em>Type Specifier</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTypeSpecifier()
+   * @generated
+   * @ordered
+   */
+  protected TypeSpecifier typeSpecifier;
+
+  /**
+   * The default value of the '{@link #getSubscripts() <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSubscripts()
+   * @generated
+   * @ordered
+   */
+  protected static final String SUBSCRIPTS_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getSubscripts() <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSubscripts()
+   * @generated
+   * @ordered
+   */
+  protected String subscripts = SUBSCRIPTS_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected Modification modification;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ElementComponentClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELEMENT_COMPONENT_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getTypePrefix()
+  {
+    return typePrefix;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTypePrefix(String newTypePrefix)
+  {
+    String oldTypePrefix = typePrefix;
+    typePrefix = newTypePrefix;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX, oldTypePrefix, typePrefix));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TypeSpecifier getTypeSpecifier()
+  {
+    return typeSpecifier;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTypeSpecifier(TypeSpecifier newTypeSpecifier, NotificationChain msgs)
+  {
+    TypeSpecifier oldTypeSpecifier = typeSpecifier;
+    typeSpecifier = newTypeSpecifier;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER, oldTypeSpecifier, newTypeSpecifier);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTypeSpecifier(TypeSpecifier newTypeSpecifier)
+  {
+    if (newTypeSpecifier != typeSpecifier)
+    {
+      NotificationChain msgs = null;
+      if (typeSpecifier != null)
+        msgs = ((InternalEObject)typeSpecifier).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER, null, msgs);
+      if (newTypeSpecifier != null)
+        msgs = ((InternalEObject)newTypeSpecifier).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER, null, msgs);
+      msgs = basicSetTypeSpecifier(newTypeSpecifier, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER, newTypeSpecifier, newTypeSpecifier));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getSubscripts()
+  {
+    return subscripts;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSubscripts(String newSubscripts)
+  {
+    String oldSubscripts = subscripts;
+    subscripts = newSubscripts;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS, oldSubscripts, subscripts));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Modification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(Modification newModification, NotificationChain msgs)
+  {
+    Modification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(Modification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        return basicSetTypeSpecifier(null, msgs);
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION:
+        return basicSetModification(null, msgs);
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX:
+        return getTypePrefix();
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        return getTypeSpecifier();
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS:
+        return getSubscripts();
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX:
+        setTypePrefix((String)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        setTypeSpecifier((TypeSpecifier)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS:
+        setSubscripts((String)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION:
+        setModification((Modification)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX:
+        setTypePrefix(TYPE_PREFIX_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        setTypeSpecifier((TypeSpecifier)null);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS:
+        setSubscripts(SUBSCRIPTS_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION:
+        setModification((Modification)null);
+        return;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX:
+        return TYPE_PREFIX_EDEFAULT == null ? typePrefix != null : !TYPE_PREFIX_EDEFAULT.equals(typePrefix);
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER:
+        return typeSpecifier != null;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS:
+        return SUBSCRIPTS_EDEFAULT == null ? subscripts != null : !SUBSCRIPTS_EDEFAULT.equals(subscripts);
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE__COMMENT:
+        return comment != 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(" (typePrefix: ");
+    result.append(typePrefix);
+    result.append(", subscripts: ");
+    result.append(subscripts);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ElementComponentClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementListImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementListImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementListImpl.java	(revision 540)
@@ -0,0 +1,209 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ClassElement;
+import org.modelica.xtext.modelicaBase.ElementList;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element List</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementListImpl#getElements <em>Elements</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementListImpl#getAnnotations <em>Annotations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ElementListImpl extends MinimalEObjectImpl.Container implements ElementList
+{
+  /**
+   * The cached value of the '{@link #getElements() <em>Elements</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElements()
+   * @generated
+   * @ordered
+   */
+  protected EList<ClassElement> elements;
+
+  /**
+   * The cached value of the '{@link #getAnnotations() <em>Annotations</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAnnotations()
+   * @generated
+   * @ordered
+   */
+  protected EList<Annotation> annotations;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ElementListImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELEMENT_LIST;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<ClassElement> getElements()
+  {
+    if (elements == null)
+    {
+      elements = new EObjectContainmentEList<ClassElement>(ClassElement.class, this, ModelicaBasePackage.ELEMENT_LIST__ELEMENTS);
+    }
+    return elements;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Annotation> getAnnotations()
+  {
+    if (annotations == null)
+    {
+      annotations = new EObjectContainmentEList<Annotation>(Annotation.class, this, ModelicaBasePackage.ELEMENT_LIST__ANNOTATIONS);
+    }
+    return annotations;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_LIST__ELEMENTS:
+        return ((InternalEList<?>)getElements()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.ELEMENT_LIST__ANNOTATIONS:
+        return ((InternalEList<?>)getAnnotations()).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 ModelicaBasePackage.ELEMENT_LIST__ELEMENTS:
+        return getElements();
+      case ModelicaBasePackage.ELEMENT_LIST__ANNOTATIONS:
+        return getAnnotations();
+    }
+    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 ModelicaBasePackage.ELEMENT_LIST__ELEMENTS:
+        getElements().clear();
+        getElements().addAll((Collection<? extends ClassElement>)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_LIST__ANNOTATIONS:
+        getAnnotations().clear();
+        getAnnotations().addAll((Collection<? extends Annotation>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_LIST__ELEMENTS:
+        getElements().clear();
+        return;
+      case ModelicaBasePackage.ELEMENT_LIST__ANNOTATIONS:
+        getAnnotations().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_LIST__ELEMENTS:
+        return elements != null && !elements.isEmpty();
+      case ModelicaBasePackage.ELEMENT_LIST__ANNOTATIONS:
+        return annotations != null && !annotations.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ElementListImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementModificationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementModificationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementModificationImpl.java	(revision 540)
@@ -0,0 +1,323 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ElementModification;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.Modification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element Modification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementModificationImpl#getComponetRef <em>Componet Ref</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementModificationImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementModificationImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ElementModificationImpl extends argumentImpl implements ElementModification
+{
+  /**
+   * The default value of the '{@link #getComponetRef() <em>Componet Ref</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComponetRef()
+   * @generated
+   * @ordered
+   */
+  protected static final String COMPONET_REF_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getComponetRef() <em>Componet Ref</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComponetRef()
+   * @generated
+   * @ordered
+   */
+  protected String componetRef = COMPONET_REF_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected Modification modification;
+
+  /**
+   * The default value of the '{@link #getComment() <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected static final String COMMENT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected String comment = COMMENT_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ElementModificationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELEMENT_MODIFICATION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getComponetRef()
+  {
+    return componetRef;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComponetRef(String newComponetRef)
+  {
+    String oldComponetRef = componetRef;
+    componetRef = newComponetRef;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_MODIFICATION__COMPONET_REF, oldComponetRef, componetRef));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Modification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(Modification newModification, NotificationChain msgs)
+  {
+    Modification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(Modification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(String newComment)
+  {
+    String oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_MODIFICATION__COMMENT, oldComment, comment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION:
+        return basicSetModification(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 ModelicaBasePackage.ELEMENT_MODIFICATION__COMPONET_REF:
+        return getComponetRef();
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMPONET_REF:
+        setComponetRef((String)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION:
+        setModification((Modification)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMMENT:
+        setComment((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMPONET_REF:
+        setComponetRef(COMPONET_REF_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION:
+        setModification((Modification)null);
+        return;
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMMENT:
+        setComment(COMMENT_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMPONET_REF:
+        return COMPONET_REF_EDEFAULT == null ? componetRef != null : !COMPONET_REF_EDEFAULT.equals(componetRef);
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.ELEMENT_MODIFICATION__COMMENT:
+        return COMMENT_EDEFAULT == null ? comment != null : !COMMENT_EDEFAULT.equals(comment);
+    }
+    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(" (componetRef: ");
+    result.append(componetRef);
+    result.append(", comment: ");
+    result.append(comment);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ElementModificationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementRedeclarationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementRedeclarationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementRedeclarationImpl.java	(revision 540)
@@ -0,0 +1,45 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.modelica.xtext.modelicaBase.ElementRedeclaration;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element Redeclaration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ElementRedeclarationImpl extends argumentImpl implements ElementRedeclaration
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ElementRedeclarationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELEMENT_REDECLARATION;
+  }
+
+} //ElementRedeclarationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementReplaceableClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementReplaceableClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ElementReplaceableClauseImpl.java	(revision 540)
@@ -0,0 +1,268 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ConstrainingClause;
+import org.modelica.xtext.modelicaBase.ElementRedeclaration;
+import org.modelica.xtext.modelicaBase.ElementReplaceableClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Element Replaceable Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementReplaceableClauseImpl#getElement <em>Element</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ElementReplaceableClauseImpl#getConstraint <em>Constraint</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ElementReplaceableClauseImpl extends argumentImpl implements ElementReplaceableClause
+{
+  /**
+   * The cached value of the '{@link #getElement() <em>Element</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElement()
+   * @generated
+   * @ordered
+   */
+  protected ElementRedeclaration element;
+
+  /**
+   * The cached value of the '{@link #getConstraint() <em>Constraint</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getConstraint()
+   * @generated
+   * @ordered
+   */
+  protected ConstrainingClause constraint;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ElementReplaceableClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELEMENT_REPLACEABLE_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ElementRedeclaration getElement()
+  {
+    return element;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetElement(ElementRedeclaration newElement, NotificationChain msgs)
+  {
+    ElementRedeclaration oldElement = element;
+    element = newElement;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT, oldElement, newElement);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setElement(ElementRedeclaration newElement)
+  {
+    if (newElement != element)
+    {
+      NotificationChain msgs = null;
+      if (element != null)
+        msgs = ((InternalEObject)element).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT, null, msgs);
+      if (newElement != null)
+        msgs = ((InternalEObject)newElement).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT, null, msgs);
+      msgs = basicSetElement(newElement, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT, newElement, newElement));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ConstrainingClause getConstraint()
+  {
+    return constraint;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetConstraint(ConstrainingClause newConstraint, NotificationChain msgs)
+  {
+    ConstrainingClause oldConstraint = constraint;
+    constraint = newConstraint;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT, oldConstraint, newConstraint);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setConstraint(ConstrainingClause newConstraint)
+  {
+    if (newConstraint != constraint)
+    {
+      NotificationChain msgs = null;
+      if (constraint != null)
+        msgs = ((InternalEObject)constraint).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT, null, msgs);
+      if (newConstraint != null)
+        msgs = ((InternalEObject)newConstraint).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT, null, msgs);
+      msgs = basicSetConstraint(newConstraint, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT, newConstraint, newConstraint));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT:
+        return basicSetElement(null, msgs);
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT:
+        return basicSetConstraint(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 ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT:
+        return getElement();
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT:
+        return getConstraint();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT:
+        setElement((ElementRedeclaration)newValue);
+        return;
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT:
+        setConstraint((ConstrainingClause)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT:
+        setElement((ElementRedeclaration)null);
+        return;
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT:
+        setConstraint((ConstrainingClause)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__ELEMENT:
+        return element != null;
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT:
+        return constraint != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ElementReplaceableClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EntityDefinitionImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EntityDefinitionImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EntityDefinitionImpl.java	(revision 540)
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.EntityDefinition;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Entity Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EntityDefinitionImpl#getName <em>Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EntityDefinitionImpl extends MinimalEObjectImpl.Container implements EntityDefinition
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected EntityDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ENTITY_DEFINITION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ENTITY_DEFINITION__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENTITY_DEFINITION__NAME:
+        return getName();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENTITY_DEFINITION__NAME:
+        setName((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENTITY_DEFINITION__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENTITY_DEFINITION__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+    }
+    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(" (name: ");
+    result.append(name);
+    result.append(')');
+    return result.toString();
+  }
+
+} //EntityDefinitionImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EnumerationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EnumerationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EnumerationImpl.java	(revision 540)
@@ -0,0 +1,353 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ClassType;
+import org.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.Enumeration;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Enumeration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EnumerationImpl#getClassType <em>Class Type</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EnumerationImpl#getIdent <em>Ident</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EnumerationImpl#getEnumComments <em>Enum Comments</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EnumerationImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EnumerationImpl extends EntityDefinitionImpl implements Enumeration
+{
+  /**
+   * The default value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected static final ClassType CLASS_TYPE_EDEFAULT = ClassType.CLASS;
+
+  /**
+   * The cached value of the '{@link #getClassType() <em>Class Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassType()
+   * @generated
+   * @ordered
+   */
+  protected ClassType classType = CLASS_TYPE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getIdent() <em>Ident</em>}' attribute list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getIdent()
+   * @generated
+   * @ordered
+   */
+  protected EList<String> ident;
+
+  /**
+   * The cached value of the '{@link #getEnumComments() <em>Enum Comments</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEnumComments()
+   * @generated
+   * @ordered
+   */
+  protected EList<Comment> enumComments;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected EnumerationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ENUMERATION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassType getClassType()
+  {
+    return classType;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setClassType(ClassType newClassType)
+  {
+    ClassType oldClassType = classType;
+    classType = newClassType == null ? CLASS_TYPE_EDEFAULT : newClassType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ENUMERATION__CLASS_TYPE, oldClassType, classType));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<String> getIdent()
+  {
+    if (ident == null)
+    {
+      ident = new EDataTypeEList<String>(String.class, this, ModelicaBasePackage.ENUMERATION__IDENT);
+    }
+    return ident;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Comment> getEnumComments()
+  {
+    if (enumComments == null)
+    {
+      enumComments = new EObjectContainmentEList<Comment>(Comment.class, this, ModelicaBasePackage.ENUMERATION__ENUM_COMMENTS);
+    }
+    return enumComments;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ENUMERATION__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ENUMERATION__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ENUMERATION__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ENUMERATION__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENUMERATION__ENUM_COMMENTS:
+        return ((InternalEList<?>)getEnumComments()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.ENUMERATION__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.ENUMERATION__CLASS_TYPE:
+        return getClassType();
+      case ModelicaBasePackage.ENUMERATION__IDENT:
+        return getIdent();
+      case ModelicaBasePackage.ENUMERATION__ENUM_COMMENTS:
+        return getEnumComments();
+      case ModelicaBasePackage.ENUMERATION__COMMENT:
+        return getComment();
+    }
+    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 ModelicaBasePackage.ENUMERATION__CLASS_TYPE:
+        setClassType((ClassType)newValue);
+        return;
+      case ModelicaBasePackage.ENUMERATION__IDENT:
+        getIdent().clear();
+        getIdent().addAll((Collection<? extends String>)newValue);
+        return;
+      case ModelicaBasePackage.ENUMERATION__ENUM_COMMENTS:
+        getEnumComments().clear();
+        getEnumComments().addAll((Collection<? extends Comment>)newValue);
+        return;
+      case ModelicaBasePackage.ENUMERATION__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENUMERATION__CLASS_TYPE:
+        setClassType(CLASS_TYPE_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ENUMERATION__IDENT:
+        getIdent().clear();
+        return;
+      case ModelicaBasePackage.ENUMERATION__ENUM_COMMENTS:
+        getEnumComments().clear();
+        return;
+      case ModelicaBasePackage.ENUMERATION__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ENUMERATION__CLASS_TYPE:
+        return classType != CLASS_TYPE_EDEFAULT;
+      case ModelicaBasePackage.ENUMERATION__IDENT:
+        return ident != null && !ident.isEmpty();
+      case ModelicaBasePackage.ENUMERATION__ENUM_COMMENTS:
+        return enumComments != null && !enumComments.isEmpty();
+      case ModelicaBasePackage.ENUMERATION__COMMENT:
+        return comment != 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(" (classType: ");
+    result.append(classType);
+    result.append(", ident: ");
+    result.append(ident);
+    result.append(')');
+    return result.toString();
+  }
+
+} //EnumerationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EquationClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EquationClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/EquationClauseImpl.java	(revision 540)
@@ -0,0 +1,207 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.EquationClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.equation_rule;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Equation Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EquationClauseImpl#getEquationRules <em>Equation Rules</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.EquationClauseImpl#getAnnotations <em>Annotations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EquationClauseImpl extends initial_equation_rule_clauseImpl implements EquationClause
+{
+  /**
+   * The cached value of the '{@link #getEquationRules() <em>Equation Rules</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEquationRules()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> equationRules;
+
+  /**
+   * The cached value of the '{@link #getAnnotations() <em>Annotations</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAnnotations()
+   * @generated
+   * @ordered
+   */
+  protected EList<Annotation> annotations;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected EquationClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.EQUATION_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getEquationRules()
+  {
+    if (equationRules == null)
+    {
+      equationRules = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.EQUATION_CLAUSE__EQUATION_RULES);
+    }
+    return equationRules;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Annotation> getAnnotations()
+  {
+    if (annotations == null)
+    {
+      annotations = new EObjectContainmentEList<Annotation>(Annotation.class, this, ModelicaBasePackage.EQUATION_CLAUSE__ANNOTATIONS);
+    }
+    return annotations;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_CLAUSE__EQUATION_RULES:
+        return ((InternalEList<?>)getEquationRules()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.EQUATION_CLAUSE__ANNOTATIONS:
+        return ((InternalEList<?>)getAnnotations()).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 ModelicaBasePackage.EQUATION_CLAUSE__EQUATION_RULES:
+        return getEquationRules();
+      case ModelicaBasePackage.EQUATION_CLAUSE__ANNOTATIONS:
+        return getAnnotations();
+    }
+    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 ModelicaBasePackage.EQUATION_CLAUSE__EQUATION_RULES:
+        getEquationRules().clear();
+        getEquationRules().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+      case ModelicaBasePackage.EQUATION_CLAUSE__ANNOTATIONS:
+        getAnnotations().clear();
+        getAnnotations().addAll((Collection<? extends Annotation>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_CLAUSE__EQUATION_RULES:
+        getEquationRules().clear();
+        return;
+      case ModelicaBasePackage.EQUATION_CLAUSE__ANNOTATIONS:
+        getAnnotations().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_CLAUSE__EQUATION_RULES:
+        return equationRules != null && !equationRules.isEmpty();
+      case ModelicaBasePackage.EQUATION_CLAUSE__ANNOTATIONS:
+        return annotations != null && !annotations.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //EquationClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ExtendsClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ExtendsClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ExtendsClauseImpl.java	(revision 540)
@@ -0,0 +1,339 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ClassModification;
+import org.modelica.xtext.modelicaBase.ExtendsClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Extends Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl#getBaseClass <em>Base Class</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl#getModification <em>Modification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ExtendsClauseImpl#getAnnotation <em>Annotation</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ExtendsClauseImpl extends ClassElementImpl implements ExtendsClause
+{
+  /**
+   * The default value of the '{@link #getBaseClass() <em>Base Class</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getBaseClass()
+   * @generated
+   * @ordered
+   */
+  protected static final String BASE_CLASS_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getBaseClass() <em>Base Class</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getBaseClass()
+   * @generated
+   * @ordered
+   */
+  protected String baseClass = BASE_CLASS_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getModification() <em>Modification</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getModification()
+   * @generated
+   * @ordered
+   */
+  protected ClassModification modification;
+
+  /**
+   * The cached value of the '{@link #getAnnotation() <em>Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAnnotation()
+   * @generated
+   * @ordered
+   */
+  protected Annotation annotation;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ExtendsClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.EXTENDS_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getBaseClass()
+  {
+    return baseClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setBaseClass(String newBaseClass)
+  {
+    String oldBaseClass = baseClass;
+    baseClass = newBaseClass;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTENDS_CLAUSE__BASE_CLASS, oldBaseClass, baseClass));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassModification getModification()
+  {
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetModification(ClassModification newModification, NotificationChain msgs)
+  {
+    ClassModification oldModification = modification;
+    modification = newModification;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION, oldModification, newModification);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setModification(ClassModification newModification)
+  {
+    if (newModification != modification)
+    {
+      NotificationChain msgs = null;
+      if (modification != null)
+        msgs = ((InternalEObject)modification).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION, null, msgs);
+      if (newModification != null)
+        msgs = ((InternalEObject)newModification).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION, null, msgs);
+      msgs = basicSetModification(newModification, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION, newModification, newModification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Annotation getAnnotation()
+  {
+    return annotation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAnnotation(Annotation newAnnotation, NotificationChain msgs)
+  {
+    Annotation oldAnnotation = annotation;
+    annotation = newAnnotation;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION, oldAnnotation, newAnnotation);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAnnotation(Annotation newAnnotation)
+  {
+    if (newAnnotation != annotation)
+    {
+      NotificationChain msgs = null;
+      if (annotation != null)
+        msgs = ((InternalEObject)annotation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION, null, msgs);
+      if (newAnnotation != null)
+        msgs = ((InternalEObject)newAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION, null, msgs);
+      msgs = basicSetAnnotation(newAnnotation, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION, newAnnotation, newAnnotation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION:
+        return basicSetModification(null, msgs);
+      case ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION:
+        return basicSetAnnotation(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 ModelicaBasePackage.EXTENDS_CLAUSE__BASE_CLASS:
+        return getBaseClass();
+      case ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION:
+        return getModification();
+      case ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION:
+        return getAnnotation();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTENDS_CLAUSE__BASE_CLASS:
+        setBaseClass((String)newValue);
+        return;
+      case ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION:
+        setModification((ClassModification)newValue);
+        return;
+      case ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION:
+        setAnnotation((Annotation)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTENDS_CLAUSE__BASE_CLASS:
+        setBaseClass(BASE_CLASS_EDEFAULT);
+        return;
+      case ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION:
+        setModification((ClassModification)null);
+        return;
+      case ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION:
+        setAnnotation((Annotation)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTENDS_CLAUSE__BASE_CLASS:
+        return BASE_CLASS_EDEFAULT == null ? baseClass != null : !BASE_CLASS_EDEFAULT.equals(baseClass);
+      case ModelicaBasePackage.EXTENDS_CLAUSE__MODIFICATION:
+        return modification != null;
+      case ModelicaBasePackage.EXTENDS_CLAUSE__ANNOTATION:
+        return annotation != 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(" (baseClass: ");
+    result.append(baseClass);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ExtendsClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ExternalClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ExternalClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ExternalClauseImpl.java	(revision 540)
@@ -0,0 +1,339 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ExternalClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>External Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl#getLanguageSpecification <em>Language Specification</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl#getAnnotation <em>Annotation</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ExternalClauseImpl#getExtAnnotation <em>Ext Annotation</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ExternalClauseImpl extends MinimalEObjectImpl.Container implements ExternalClause
+{
+  /**
+   * The default value of the '{@link #getLanguageSpecification() <em>Language Specification</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLanguageSpecification()
+   * @generated
+   * @ordered
+   */
+  protected static final String LANGUAGE_SPECIFICATION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getLanguageSpecification() <em>Language Specification</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLanguageSpecification()
+   * @generated
+   * @ordered
+   */
+  protected String languageSpecification = LANGUAGE_SPECIFICATION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getAnnotation() <em>Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAnnotation()
+   * @generated
+   * @ordered
+   */
+  protected Annotation annotation;
+
+  /**
+   * The cached value of the '{@link #getExtAnnotation() <em>Ext Annotation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExtAnnotation()
+   * @generated
+   * @ordered
+   */
+  protected Annotation extAnnotation;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ExternalClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.EXTERNAL_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLanguageSpecification()
+  {
+    return languageSpecification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLanguageSpecification(String newLanguageSpecification)
+  {
+    String oldLanguageSpecification = languageSpecification;
+    languageSpecification = newLanguageSpecification;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION, oldLanguageSpecification, languageSpecification));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Annotation getAnnotation()
+  {
+    return annotation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAnnotation(Annotation newAnnotation, NotificationChain msgs)
+  {
+    Annotation oldAnnotation = annotation;
+    annotation = newAnnotation;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION, oldAnnotation, newAnnotation);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAnnotation(Annotation newAnnotation)
+  {
+    if (newAnnotation != annotation)
+    {
+      NotificationChain msgs = null;
+      if (annotation != null)
+        msgs = ((InternalEObject)annotation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION, null, msgs);
+      if (newAnnotation != null)
+        msgs = ((InternalEObject)newAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION, null, msgs);
+      msgs = basicSetAnnotation(newAnnotation, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION, newAnnotation, newAnnotation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Annotation getExtAnnotation()
+  {
+    return extAnnotation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetExtAnnotation(Annotation newExtAnnotation, NotificationChain msgs)
+  {
+    Annotation oldExtAnnotation = extAnnotation;
+    extAnnotation = newExtAnnotation;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION, oldExtAnnotation, newExtAnnotation);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExtAnnotation(Annotation newExtAnnotation)
+  {
+    if (newExtAnnotation != extAnnotation)
+    {
+      NotificationChain msgs = null;
+      if (extAnnotation != null)
+        msgs = ((InternalEObject)extAnnotation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION, null, msgs);
+      if (newExtAnnotation != null)
+        msgs = ((InternalEObject)newExtAnnotation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION, null, msgs);
+      msgs = basicSetExtAnnotation(newExtAnnotation, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION, newExtAnnotation, newExtAnnotation));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION:
+        return basicSetAnnotation(null, msgs);
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION:
+        return basicSetExtAnnotation(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 ModelicaBasePackage.EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION:
+        return getLanguageSpecification();
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION:
+        return getAnnotation();
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION:
+        return getExtAnnotation();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION:
+        setLanguageSpecification((String)newValue);
+        return;
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION:
+        setAnnotation((Annotation)newValue);
+        return;
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION:
+        setExtAnnotation((Annotation)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION:
+        setLanguageSpecification(LANGUAGE_SPECIFICATION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION:
+        setAnnotation((Annotation)null);
+        return;
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION:
+        setExtAnnotation((Annotation)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION:
+        return LANGUAGE_SPECIFICATION_EDEFAULT == null ? languageSpecification != null : !LANGUAGE_SPECIFICATION_EDEFAULT.equals(languageSpecification);
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__ANNOTATION:
+        return annotation != null;
+      case ModelicaBasePackage.EXTERNAL_CLAUSE__EXT_ANNOTATION:
+        return extAnnotation != 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(" (languageSpecification: ");
+    result.append(languageSpecification);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ExternalClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ForAlgorithmClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ForAlgorithmClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ForAlgorithmClauseImpl.java	(revision 540)
@@ -0,0 +1,242 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ForAlgorithmClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.algorithm;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>For Algorithm Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ForAlgorithmClauseImpl#getForIndices <em>For Indices</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ForAlgorithmClauseImpl#getAlgorithmClauses <em>Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ForAlgorithmClauseImpl extends algorithmImpl implements ForAlgorithmClause
+{
+  /**
+   * The default value of the '{@link #getForIndices() <em>For Indices</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getForIndices()
+   * @generated
+   * @ordered
+   */
+  protected static final String FOR_INDICES_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getForIndices() <em>For Indices</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getForIndices()
+   * @generated
+   * @ordered
+   */
+  protected String forIndices = FOR_INDICES_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getAlgorithmClauses() <em>Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm> algorithmClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ForAlgorithmClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.FOR_ALGORITHM_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getForIndices()
+  {
+    return forIndices;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setForIndices(String newForIndices)
+  {
+    String oldForIndices = forIndices;
+    forIndices = newForIndices;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__FOR_INDICES, oldForIndices, forIndices));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm> getAlgorithmClauses()
+  {
+    if (algorithmClauses == null)
+    {
+      algorithmClauses = new EObjectContainmentEList<algorithm>(algorithm.class, this, ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES);
+    }
+    return algorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getAlgorithmClauses()).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 ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__FOR_INDICES:
+        return getForIndices();
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES:
+        return getAlgorithmClauses();
+    }
+    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 ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__FOR_INDICES:
+        setForIndices((String)newValue);
+        return;
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES:
+        getAlgorithmClauses().clear();
+        getAlgorithmClauses().addAll((Collection<? extends algorithm>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__FOR_INDICES:
+        setForIndices(FOR_INDICES_EDEFAULT);
+        return;
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES:
+        getAlgorithmClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__FOR_INDICES:
+        return FOR_INDICES_EDEFAULT == null ? forIndices != null : !FOR_INDICES_EDEFAULT.equals(forIndices);
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES:
+        return algorithmClauses != null && !algorithmClauses.isEmpty();
+    }
+    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(" (forIndices: ");
+    result.append(forIndices);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ForAlgorithmClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ForEquationClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ForEquationClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ForEquationClauseImpl.java	(revision 540)
@@ -0,0 +1,242 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ForEquationClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.equation_rule;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>For Equation Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ForEquationClauseImpl#getForIndices <em>For Indices</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ForEquationClauseImpl#getEquationClauses <em>Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ForEquationClauseImpl extends equation_ruleImpl implements ForEquationClause
+{
+  /**
+   * The default value of the '{@link #getForIndices() <em>For Indices</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getForIndices()
+   * @generated
+   * @ordered
+   */
+  protected static final String FOR_INDICES_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getForIndices() <em>For Indices</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getForIndices()
+   * @generated
+   * @ordered
+   */
+  protected String forIndices = FOR_INDICES_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getEquationClauses() <em>Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> equationClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ForEquationClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.FOR_EQUATION_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getForIndices()
+  {
+    return forIndices;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setForIndices(String newForIndices)
+  {
+    String oldForIndices = forIndices;
+    forIndices = newForIndices;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.FOR_EQUATION_CLAUSE__FOR_INDICES, oldForIndices, forIndices));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getEquationClauses()
+  {
+    if (equationClauses == null)
+    {
+      equationClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.FOR_EQUATION_CLAUSE__EQUATION_CLAUSES);
+    }
+    return equationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__EQUATION_CLAUSES:
+        return ((InternalEList<?>)getEquationClauses()).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 ModelicaBasePackage.FOR_EQUATION_CLAUSE__FOR_INDICES:
+        return getForIndices();
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__EQUATION_CLAUSES:
+        return getEquationClauses();
+    }
+    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 ModelicaBasePackage.FOR_EQUATION_CLAUSE__FOR_INDICES:
+        setForIndices((String)newValue);
+        return;
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__EQUATION_CLAUSES:
+        getEquationClauses().clear();
+        getEquationClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__FOR_INDICES:
+        setForIndices(FOR_INDICES_EDEFAULT);
+        return;
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__EQUATION_CLAUSES:
+        getEquationClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__FOR_INDICES:
+        return FOR_INDICES_EDEFAULT == null ? forIndices != null : !FOR_INDICES_EDEFAULT.equals(forIndices);
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE__EQUATION_CLAUSES:
+        return equationClauses != null && !equationClauses.isEmpty();
+    }
+    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(" (forIndices: ");
+    result.append(forIndices);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ForEquationClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ImportClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ImportClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ImportClauseImpl.java	(revision 540)
@@ -0,0 +1,323 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ImportClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Import Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ImportClauseImpl#getAsName <em>As Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ImportClauseImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ImportClauseImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ImportClauseImpl extends ClassElementImpl implements ImportClause
+{
+  /**
+   * The default value of the '{@link #getAsName() <em>As Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAsName()
+   * @generated
+   * @ordered
+   */
+  protected static final String AS_NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getAsName() <em>As Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAsName()
+   * @generated
+   * @ordered
+   */
+  protected String asName = AS_NAME_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ImportClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.IMPORT_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getAsName()
+  {
+    return asName;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAsName(String newAsName)
+  {
+    String oldAsName = asName;
+    asName = newAsName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.IMPORT_CLAUSE__AS_NAME, oldAsName, asName));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.IMPORT_CLAUSE__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.IMPORT_CLAUSE__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.IMPORT_CLAUSE__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.IMPORT_CLAUSE__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.IMPORT_CLAUSE__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.IMPORT_CLAUSE__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.IMPORT_CLAUSE__AS_NAME:
+        return getAsName();
+      case ModelicaBasePackage.IMPORT_CLAUSE__NAME:
+        return getName();
+      case ModelicaBasePackage.IMPORT_CLAUSE__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.IMPORT_CLAUSE__AS_NAME:
+        setAsName((String)newValue);
+        return;
+      case ModelicaBasePackage.IMPORT_CLAUSE__NAME:
+        setName((String)newValue);
+        return;
+      case ModelicaBasePackage.IMPORT_CLAUSE__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.IMPORT_CLAUSE__AS_NAME:
+        setAsName(AS_NAME_EDEFAULT);
+        return;
+      case ModelicaBasePackage.IMPORT_CLAUSE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case ModelicaBasePackage.IMPORT_CLAUSE__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.IMPORT_CLAUSE__AS_NAME:
+        return AS_NAME_EDEFAULT == null ? asName != null : !AS_NAME_EDEFAULT.equals(asName);
+      case ModelicaBasePackage.IMPORT_CLAUSE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case ModelicaBasePackage.IMPORT_CLAUSE__COMMENT:
+        return comment != 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(" (asName: ");
+    result.append(asName);
+    result.append(", name: ");
+    result.append(name);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ImportClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModelicaBaseFactoryImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModelicaBaseFactoryImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModelicaBaseFactoryImpl.java	(revision 540)
@@ -0,0 +1,694 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelicaBaseFactoryImpl extends EFactoryImpl implements ModelicaBaseFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static ModelicaBaseFactory init()
+  {
+    try
+    {
+      ModelicaBaseFactory theModelicaBaseFactory = (ModelicaBaseFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.modelica.org/xtext/ModelicaBase"); 
+      if (theModelicaBaseFactory != null)
+      {
+        return theModelicaBaseFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new ModelicaBaseFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ModelicaBaseFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+      case ModelicaBasePackage.STORAGE_UNIT: return createStorageUnit();
+      case ModelicaBasePackage.ENTITY_DEFINITION: return createEntityDefinition();
+      case ModelicaBasePackage.CLASS_DEFINITION: return createClassDefinition();
+      case ModelicaBasePackage.PARTIAL_DERIVATIVE: return createPartialDerivative();
+      case ModelicaBasePackage.CLASS_MODIFICATION: return createClassModification();
+      case ModelicaBasePackage.CLASS_OVERLOADING: return createClassOverloading();
+      case ModelicaBasePackage.ENUMERATION: return createEnumeration();
+      case ModelicaBasePackage.EXTERNAL_CLAUSE: return createExternalClause();
+      case ModelicaBasePackage.ELEMENT_LIST: return createElementList();
+      case ModelicaBasePackage.CLASS_ELEMENT: return createClassElement();
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE: return createReplaceableElementClause();
+      case ModelicaBasePackage.IMPORT_CLAUSE: return createImportClause();
+      case ModelicaBasePackage.EXTENDS_CLAUSE: return createExtendsClause();
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE: return createConstrainingClause();
+      case ModelicaBasePackage.COMPONENT_CLAUSE: return createComponentClause();
+      case ModelicaBasePackage.TYPE_SPECIFIER: return createTypeSpecifier();
+      case ModelicaBasePackage.COMPONENT_DECLARATION: return createComponentDeclaration();
+      case ModelicaBasePackage.MODIFICATION: return createModification();
+      case ModelicaBasePackage.SIMPLE_MODIFICATION: return createSimpleModification();
+      case ModelicaBasePackage.ARGUMENT: return createargument();
+      case ModelicaBasePackage.ELEMENT_MODIFICATION: return createElementModification();
+      case ModelicaBasePackage.ELEMENT_REDECLARATION: return createElementRedeclaration();
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE: return createElementReplaceableClause();
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE: return createElementComponentClause();
+      case ModelicaBasePackage.EQUATION_CLAUSE: return createEquationClause();
+      case ModelicaBasePackage.ALGORITHM_CLAUSE: return createalgorithm_clause();
+      case ModelicaBasePackage.INITIAL_EQUATION_RULE_CLAUSE: return createinitial_equation_rule_clause();
+      case ModelicaBasePackage.INITIAL_ALGORITHM_CLAUSE: return createinitial_algorithm_clause();
+      case ModelicaBasePackage.EQUATION_RULE: return createequation_rule();
+      case ModelicaBasePackage.ALGORITHM: return createalgorithm();
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE: return createConditionalEquationRule();
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE: return createConditionAlgorithmRule();
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE: return createForEquationClause();
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE: return createForAlgorithmClause();
+      case ModelicaBasePackage.WHILE_CLAUSE: return createWhileClause();
+      case ModelicaBasePackage.WHEN_CLAUSE_E: return createwhen_clause_e();
+      case ModelicaBasePackage.ELSE_WHEN_E: return createelse_when_e();
+      case ModelicaBasePackage.WHEN_CLAUSE_A: return createwhen_clause_a();
+      case ModelicaBasePackage.ELSE_WHEN_A: return createelse_when_a();
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF: return createequation_rule_elseif();
+      case ModelicaBasePackage.ALGORITHM_ELSEIF: return createalgorithm_elseif();
+      case ModelicaBasePackage.COMMENT: return createComment();
+      case ModelicaBasePackage.ANNOTATION: return createAnnotation();
+      case ModelicaBasePackage.PUBLIC_ELEMENT_LIST: return createPublicElementList();
+      case ModelicaBasePackage.PROTECTES_ELEMENT_LIST: return createProtectesElementList();
+      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 ModelicaBasePackage.CLASS_TYPE:
+        return createClassTypeFromString(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 ModelicaBasePackage.CLASS_TYPE:
+        return convertClassTypeToString(eDataType, instanceValue);
+      default:
+        throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StorageUnit createStorageUnit()
+  {
+    StorageUnitImpl storageUnit = new StorageUnitImpl();
+    return storageUnit;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EntityDefinition createEntityDefinition()
+  {
+    EntityDefinitionImpl entityDefinition = new EntityDefinitionImpl();
+    return entityDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassDefinition createClassDefinition()
+  {
+    ClassDefinitionImpl classDefinition = new ClassDefinitionImpl();
+    return classDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public PartialDerivative createPartialDerivative()
+  {
+    PartialDerivativeImpl partialDerivative = new PartialDerivativeImpl();
+    return partialDerivative;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassModification createClassModification()
+  {
+    ClassModificationImpl classModification = new ClassModificationImpl();
+    return classModification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassOverloading createClassOverloading()
+  {
+    ClassOverloadingImpl classOverloading = new ClassOverloadingImpl();
+    return classOverloading;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Enumeration createEnumeration()
+  {
+    EnumerationImpl enumeration = new EnumerationImpl();
+    return enumeration;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ExternalClause createExternalClause()
+  {
+    ExternalClauseImpl externalClause = new ExternalClauseImpl();
+    return externalClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ElementList createElementList()
+  {
+    ElementListImpl elementList = new ElementListImpl();
+    return elementList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassElement createClassElement()
+  {
+    ClassElementImpl classElement = new ClassElementImpl();
+    return classElement;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ReplaceableElementClause createReplaceableElementClause()
+  {
+    ReplaceableElementClauseImpl replaceableElementClause = new ReplaceableElementClauseImpl();
+    return replaceableElementClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ImportClause createImportClause()
+  {
+    ImportClauseImpl importClause = new ImportClauseImpl();
+    return importClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ExtendsClause createExtendsClause()
+  {
+    ExtendsClauseImpl extendsClause = new ExtendsClauseImpl();
+    return extendsClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ConstrainingClause createConstrainingClause()
+  {
+    ConstrainingClauseImpl constrainingClause = new ConstrainingClauseImpl();
+    return constrainingClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ComponentClause createComponentClause()
+  {
+    ComponentClauseImpl componentClause = new ComponentClauseImpl();
+    return componentClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TypeSpecifier createTypeSpecifier()
+  {
+    TypeSpecifierImpl typeSpecifier = new TypeSpecifierImpl();
+    return typeSpecifier;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ComponentDeclaration createComponentDeclaration()
+  {
+    ComponentDeclarationImpl componentDeclaration = new ComponentDeclarationImpl();
+    return componentDeclaration;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Modification createModification()
+  {
+    ModificationImpl modification = new ModificationImpl();
+    return modification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SimpleModification createSimpleModification()
+  {
+    SimpleModificationImpl simpleModification = new SimpleModificationImpl();
+    return simpleModification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public argument createargument()
+  {
+    argumentImpl argument = new argumentImpl();
+    return argument;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ElementModification createElementModification()
+  {
+    ElementModificationImpl elementModification = new ElementModificationImpl();
+    return elementModification;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ElementRedeclaration createElementRedeclaration()
+  {
+    ElementRedeclarationImpl elementRedeclaration = new ElementRedeclarationImpl();
+    return elementRedeclaration;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ElementReplaceableClause createElementReplaceableClause()
+  {
+    ElementReplaceableClauseImpl elementReplaceableClause = new ElementReplaceableClauseImpl();
+    return elementReplaceableClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ElementComponentClause createElementComponentClause()
+  {
+    ElementComponentClauseImpl elementComponentClause = new ElementComponentClauseImpl();
+    return elementComponentClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EquationClause createEquationClause()
+  {
+    EquationClauseImpl equationClause = new EquationClauseImpl();
+    return equationClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public algorithm_clause createalgorithm_clause()
+  {
+    algorithm_clauseImpl algorithm_clause = new algorithm_clauseImpl();
+    return algorithm_clause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public initial_equation_rule_clause createinitial_equation_rule_clause()
+  {
+    initial_equation_rule_clauseImpl initial_equation_rule_clause = new initial_equation_rule_clauseImpl();
+    return initial_equation_rule_clause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public initial_algorithm_clause createinitial_algorithm_clause()
+  {
+    initial_algorithm_clauseImpl initial_algorithm_clause = new initial_algorithm_clauseImpl();
+    return initial_algorithm_clause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public equation_rule createequation_rule()
+  {
+    equation_ruleImpl equation_rule = new equation_ruleImpl();
+    return equation_rule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public algorithm createalgorithm()
+  {
+    algorithmImpl algorithm = new algorithmImpl();
+    return algorithm;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ConditionalEquationRule createConditionalEquationRule()
+  {
+    ConditionalEquationRuleImpl conditionalEquationRule = new ConditionalEquationRuleImpl();
+    return conditionalEquationRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ConditionAlgorithmRule createConditionAlgorithmRule()
+  {
+    ConditionAlgorithmRuleImpl conditionAlgorithmRule = new ConditionAlgorithmRuleImpl();
+    return conditionAlgorithmRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ForEquationClause createForEquationClause()
+  {
+    ForEquationClauseImpl forEquationClause = new ForEquationClauseImpl();
+    return forEquationClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ForAlgorithmClause createForAlgorithmClause()
+  {
+    ForAlgorithmClauseImpl forAlgorithmClause = new ForAlgorithmClauseImpl();
+    return forAlgorithmClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public WhileClause createWhileClause()
+  {
+    WhileClauseImpl whileClause = new WhileClauseImpl();
+    return whileClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public when_clause_e createwhen_clause_e()
+  {
+    when_clause_eImpl when_clause_e = new when_clause_eImpl();
+    return when_clause_e;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public else_when_e createelse_when_e()
+  {
+    else_when_eImpl else_when_e = new else_when_eImpl();
+    return else_when_e;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public when_clause_a createwhen_clause_a()
+  {
+    when_clause_aImpl when_clause_a = new when_clause_aImpl();
+    return when_clause_a;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public else_when_a createelse_when_a()
+  {
+    else_when_aImpl else_when_a = new else_when_aImpl();
+    return else_when_a;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public equation_rule_elseif createequation_rule_elseif()
+  {
+    equation_rule_elseifImpl equation_rule_elseif = new equation_rule_elseifImpl();
+    return equation_rule_elseif;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public algorithm_elseif createalgorithm_elseif()
+  {
+    algorithm_elseifImpl algorithm_elseif = new algorithm_elseifImpl();
+    return algorithm_elseif;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment createComment()
+  {
+    CommentImpl comment = new CommentImpl();
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Annotation createAnnotation()
+  {
+    AnnotationImpl annotation = new AnnotationImpl();
+    return annotation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public PublicElementList createPublicElementList()
+  {
+    PublicElementListImpl publicElementList = new PublicElementListImpl();
+    return publicElementList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ProtectesElementList createProtectesElementList()
+  {
+    ProtectesElementListImpl protectesElementList = new ProtectesElementListImpl();
+    return protectesElementList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassType createClassTypeFromString(EDataType eDataType, String initialValue)
+  {
+    ClassType result = ClassType.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 convertClassTypeToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ModelicaBasePackage getModelicaBasePackage()
+  {
+    return (ModelicaBasePackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static ModelicaBasePackage getPackage()
+  {
+    return ModelicaBasePackage.eINSTANCE;
+  }
+
+} //ModelicaBaseFactoryImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModelicaBasePackageImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModelicaBasePackageImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModelicaBasePackageImpl.java	(revision 540)
@@ -0,0 +1,2372 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.impl.EPackageImpl;
+
+import org.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ClassDefinition;
+import org.modelica.xtext.modelicaBase.ClassElement;
+import org.modelica.xtext.modelicaBase.ClassModification;
+import org.modelica.xtext.modelicaBase.ClassOverloading;
+import org.modelica.xtext.modelicaBase.ClassType;
+import org.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ComponentClause;
+import org.modelica.xtext.modelicaBase.ComponentDeclaration;
+import org.modelica.xtext.modelicaBase.ConditionAlgorithmRule;
+import org.modelica.xtext.modelicaBase.ConditionalEquationRule;
+import org.modelica.xtext.modelicaBase.ConstrainingClause;
+import org.modelica.xtext.modelicaBase.ElementComponentClause;
+import org.modelica.xtext.modelicaBase.ElementList;
+import org.modelica.xtext.modelicaBase.ElementModification;
+import org.modelica.xtext.modelicaBase.ElementRedeclaration;
+import org.modelica.xtext.modelicaBase.ElementReplaceableClause;
+import org.modelica.xtext.modelicaBase.EntityDefinition;
+import org.modelica.xtext.modelicaBase.Enumeration;
+import org.modelica.xtext.modelicaBase.EquationClause;
+import org.modelica.xtext.modelicaBase.ExtendsClause;
+import org.modelica.xtext.modelicaBase.ExternalClause;
+import org.modelica.xtext.modelicaBase.ForAlgorithmClause;
+import org.modelica.xtext.modelicaBase.ForEquationClause;
+import org.modelica.xtext.modelicaBase.ImportClause;
+import org.modelica.xtext.modelicaBase.ModelicaBaseFactory;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.Modification;
+import org.modelica.xtext.modelicaBase.PartialDerivative;
+import org.modelica.xtext.modelicaBase.ProtectesElementList;
+import org.modelica.xtext.modelicaBase.PublicElementList;
+import org.modelica.xtext.modelicaBase.ReplaceableElementClause;
+import org.modelica.xtext.modelicaBase.SimpleModification;
+import org.modelica.xtext.modelicaBase.StorageUnit;
+import org.modelica.xtext.modelicaBase.TypeSpecifier;
+import org.modelica.xtext.modelicaBase.WhileClause;
+import org.modelica.xtext.modelicaBase.algorithm;
+import org.modelica.xtext.modelicaBase.algorithm_clause;
+import org.modelica.xtext.modelicaBase.algorithm_elseif;
+import org.modelica.xtext.modelicaBase.argument;
+import org.modelica.xtext.modelicaBase.else_when_a;
+import org.modelica.xtext.modelicaBase.else_when_e;
+import org.modelica.xtext.modelicaBase.equation_rule;
+import org.modelica.xtext.modelicaBase.equation_rule_elseif;
+import org.modelica.xtext.modelicaBase.initial_algorithm_clause;
+import org.modelica.xtext.modelicaBase.initial_equation_rule_clause;
+import org.modelica.xtext.modelicaBase.when_clause_a;
+import org.modelica.xtext.modelicaBase.when_clause_e;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelicaBasePackageImpl extends EPackageImpl implements ModelicaBasePackage
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass storageUnitEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass entityDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass classDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass partialDerivativeEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass classModificationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass classOverloadingEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass enumerationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass externalClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass elementListEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass classElementEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass replaceableElementClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass importClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass extendsClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass constrainingClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass componentClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass typeSpecifierEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass componentDeclarationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass modificationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass simpleModificationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass argumentEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass elementModificationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass elementRedeclarationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass elementReplaceableClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass elementComponentClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass equationClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass algorithm_clauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass initial_equation_rule_clauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass initial_algorithm_clauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass equation_ruleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass algorithmEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass conditionalEquationRuleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass conditionAlgorithmRuleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass forEquationClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass forAlgorithmClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass whileClauseEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass when_clause_eEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass else_when_eEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass when_clause_aEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass else_when_aEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass equation_rule_elseifEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass algorithm_elseifEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass commentEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass annotationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass publicElementListEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass protectesElementListEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum classTypeEEnum = 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.modelica.xtext.modelicaBase.ModelicaBasePackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private ModelicaBasePackageImpl()
+  {
+    super(eNS_URI, ModelicaBaseFactory.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 ModelicaBasePackage#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 ModelicaBasePackage init()
+  {
+    if (isInited) return (ModelicaBasePackage)EPackage.Registry.INSTANCE.getEPackage(ModelicaBasePackage.eNS_URI);
+
+    // Obtain or create and register package
+    ModelicaBasePackageImpl theModelicaBasePackage = (ModelicaBasePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ModelicaBasePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ModelicaBasePackageImpl());
+
+    isInited = true;
+
+    // Create package meta-data objects
+    theModelicaBasePackage.createPackageContents();
+
+    // Initialize created meta-data
+    theModelicaBasePackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theModelicaBasePackage.freeze();
+
+  
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(ModelicaBasePackage.eNS_URI, theModelicaBasePackage);
+    return theModelicaBasePackage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getStorageUnit()
+  {
+    return storageUnitEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getStorageUnit_ClassDefinition()
+  {
+    return (EReference)storageUnitEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getEntityDefinition()
+  {
+    return entityDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getEntityDefinition_Name()
+  {
+    return (EAttribute)entityDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getClassDefinition()
+  {
+    return classDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassDefinition_Encapsulated()
+  {
+    return (EAttribute)classDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassDefinition_Partial()
+  {
+    return (EAttribute)classDefinitionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassDefinition_Expandable()
+  {
+    return (EAttribute)classDefinitionEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassDefinition_ClassType()
+  {
+    return (EAttribute)classDefinitionEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassDefinition_Comment()
+  {
+    return (EAttribute)classDefinitionEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_Modification()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(5);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_ElemList()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(6);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_InitialEquationClauses()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(7);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_InitialAlgorithmClauses()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(8);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_EquationClauses()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(9);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_AlgorithmClauses()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(10);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassDefinition_ExtClause()
+  {
+    return (EReference)classDefinitionEClass.getEStructuralFeatures().get(11);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getPartialDerivative()
+  {
+    return partialDerivativeEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getPartialDerivative_Comment()
+  {
+    return (EReference)partialDerivativeEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getClassModification()
+  {
+    return classModificationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassModification_ClassType()
+  {
+    return (EAttribute)classModificationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassModification_TypeSpecifier()
+  {
+    return (EReference)classModificationEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassModification_Modification()
+  {
+    return (EReference)classModificationEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassModification_Comment()
+  {
+    return (EReference)classModificationEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassModification_Arguments()
+  {
+    return (EReference)classModificationEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getClassOverloading()
+  {
+    return classOverloadingEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getClassOverloading_ClassType()
+  {
+    return (EAttribute)classOverloadingEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getClassOverloading_Comment()
+  {
+    return (EReference)classOverloadingEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getEnumeration()
+  {
+    return enumerationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getEnumeration_ClassType()
+  {
+    return (EAttribute)enumerationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getEnumeration_Ident()
+  {
+    return (EAttribute)enumerationEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEnumeration_EnumComments()
+  {
+    return (EReference)enumerationEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEnumeration_Comment()
+  {
+    return (EReference)enumerationEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getExternalClause()
+  {
+    return externalClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getExternalClause_LanguageSpecification()
+  {
+    return (EAttribute)externalClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExternalClause_Annotation()
+  {
+    return (EReference)externalClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExternalClause_ExtAnnotation()
+  {
+    return (EReference)externalClauseEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getElementList()
+  {
+    return elementListEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementList_Elements()
+  {
+    return (EReference)elementListEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementList_Annotations()
+  {
+    return (EReference)elementListEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getClassElement()
+  {
+    return classElementEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getReplaceableElementClause()
+  {
+    return replaceableElementClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getReplaceableElementClause_Entity()
+  {
+    return (EReference)replaceableElementClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getReplaceableElementClause_Constrain()
+  {
+    return (EReference)replaceableElementClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getImportClause()
+  {
+    return importClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getImportClause_AsName()
+  {
+    return (EAttribute)importClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getImportClause_Name()
+  {
+    return (EAttribute)importClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getImportClause_Comment()
+  {
+    return (EReference)importClauseEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getExtendsClause()
+  {
+    return extendsClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getExtendsClause_BaseClass()
+  {
+    return (EAttribute)extendsClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExtendsClause_Modification()
+  {
+    return (EReference)extendsClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExtendsClause_Annotation()
+  {
+    return (EReference)extendsClauseEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getConstrainingClause()
+  {
+    return constrainingClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getConstrainingClause_Name()
+  {
+    return (EAttribute)constrainingClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstrainingClause_Modification()
+  {
+    return (EReference)constrainingClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConstrainingClause_Comment()
+  {
+    return (EReference)constrainingClauseEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getComponentClause()
+  {
+    return componentClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getComponentClause_TypePrefix()
+  {
+    return (EAttribute)componentClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComponentClause_TypeSpecifier()
+  {
+    return (EReference)componentClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComponentClause_Declarations()
+  {
+    return (EReference)componentClauseEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getTypeSpecifier()
+  {
+    return typeSpecifierEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getTypeSpecifier_Name()
+  {
+    return (EAttribute)typeSpecifierEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getTypeSpecifier_Subscripts()
+  {
+    return (EAttribute)typeSpecifierEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getComponentDeclaration()
+  {
+    return componentDeclarationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getComponentDeclaration_Subscripts()
+  {
+    return (EAttribute)componentDeclarationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComponentDeclaration_Modification()
+  {
+    return (EReference)componentDeclarationEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getComponentDeclaration_Condition()
+  {
+    return (EAttribute)componentDeclarationEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComponentDeclaration_Comment()
+  {
+    return (EReference)componentDeclarationEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getModification()
+  {
+    return modificationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getModification_Expression()
+  {
+    return (EAttribute)modificationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getSimpleModification()
+  {
+    return simpleModificationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getargument()
+  {
+    return argumentEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getElementModification()
+  {
+    return elementModificationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getElementModification_ComponetRef()
+  {
+    return (EAttribute)elementModificationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementModification_Modification()
+  {
+    return (EReference)elementModificationEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getElementModification_Comment()
+  {
+    return (EAttribute)elementModificationEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getElementRedeclaration()
+  {
+    return elementRedeclarationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getElementReplaceableClause()
+  {
+    return elementReplaceableClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementReplaceableClause_Element()
+  {
+    return (EReference)elementReplaceableClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementReplaceableClause_Constraint()
+  {
+    return (EReference)elementReplaceableClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getElementComponentClause()
+  {
+    return elementComponentClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getElementComponentClause_TypePrefix()
+  {
+    return (EAttribute)elementComponentClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementComponentClause_TypeSpecifier()
+  {
+    return (EReference)elementComponentClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getElementComponentClause_Subscripts()
+  {
+    return (EAttribute)elementComponentClauseEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementComponentClause_Modification()
+  {
+    return (EReference)elementComponentClauseEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getElementComponentClause_Comment()
+  {
+    return (EReference)elementComponentClauseEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getEquationClause()
+  {
+    return equationClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEquationClause_EquationRules()
+  {
+    return (EReference)equationClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEquationClause_Annotations()
+  {
+    return (EReference)equationClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getalgorithm_clause()
+  {
+    return algorithm_clauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getalgorithm_clause_AlgorithmRules()
+  {
+    return (EReference)algorithm_clauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getalgorithm_clause_Annotations()
+  {
+    return (EReference)algorithm_clauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getinitial_equation_rule_clause()
+  {
+    return initial_equation_rule_clauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getinitial_algorithm_clause()
+  {
+    return initial_algorithm_clauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getequation_rule()
+  {
+    return equation_ruleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getequation_rule_Comment()
+  {
+    return (EReference)equation_ruleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getalgorithm()
+  {
+    return algorithmEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getalgorithm_Comment()
+  {
+    return (EReference)algorithmEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getConditionalEquationRule()
+  {
+    return conditionalEquationRuleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConditionalEquationRule_ThenEquationClauses()
+  {
+    return (EReference)conditionalEquationRuleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConditionalEquationRule_ElseifClauses()
+  {
+    return (EReference)conditionalEquationRuleEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConditionalEquationRule_ElseEquationClauses()
+  {
+    return (EReference)conditionalEquationRuleEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getConditionAlgorithmRule()
+  {
+    return conditionAlgorithmRuleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getConditionAlgorithmRule_Condition()
+  {
+    return (EAttribute)conditionAlgorithmRuleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConditionAlgorithmRule_ThenAlgorithmClauses()
+  {
+    return (EReference)conditionAlgorithmRuleEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConditionAlgorithmRule_ElseifClauses()
+  {
+    return (EReference)conditionAlgorithmRuleEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getConditionAlgorithmRule_ElseAlgotithmClauses()
+  {
+    return (EReference)conditionAlgorithmRuleEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getForEquationClause()
+  {
+    return forEquationClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getForEquationClause_ForIndices()
+  {
+    return (EAttribute)forEquationClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getForEquationClause_EquationClauses()
+  {
+    return (EReference)forEquationClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getForAlgorithmClause()
+  {
+    return forAlgorithmClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getForAlgorithmClause_ForIndices()
+  {
+    return (EAttribute)forAlgorithmClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getForAlgorithmClause_AlgorithmClauses()
+  {
+    return (EReference)forAlgorithmClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getWhileClause()
+  {
+    return whileClauseEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getWhileClause_Condition()
+  {
+    return (EAttribute)whileClauseEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getWhileClause_AlgorithmClauses()
+  {
+    return (EReference)whileClauseEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getwhen_clause_e()
+  {
+    return when_clause_eEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getwhen_clause_e_Condition()
+  {
+    return (EAttribute)when_clause_eEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getwhen_clause_e_ThenEquationClauses()
+  {
+    return (EReference)when_clause_eEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getwhen_clause_e_ElseWhenClauses()
+  {
+    return (EReference)when_clause_eEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getelse_when_e()
+  {
+    return else_when_eEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getelse_when_e_Condition()
+  {
+    return (EAttribute)else_when_eEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getelse_when_e_ThenEquationClauses()
+  {
+    return (EReference)else_when_eEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getwhen_clause_a()
+  {
+    return when_clause_aEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getwhen_clause_a_Condition()
+  {
+    return (EAttribute)when_clause_aEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getwhen_clause_a_ThenAlgorithmClauses()
+  {
+    return (EReference)when_clause_aEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getwhen_clause_a_ElseWhenClauses()
+  {
+    return (EReference)when_clause_aEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getelse_when_a()
+  {
+    return else_when_aEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getelse_when_a_Condition()
+  {
+    return (EAttribute)else_when_aEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getelse_when_a_ThenAlgorithmClauses()
+  {
+    return (EReference)else_when_aEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getequation_rule_elseif()
+  {
+    return equation_rule_elseifEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getequation_rule_elseif_Condition()
+  {
+    return (EAttribute)equation_rule_elseifEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getequation_rule_elseif_ThenEquationClauses()
+  {
+    return (EReference)equation_rule_elseifEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getalgorithm_elseif()
+  {
+    return algorithm_elseifEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getalgorithm_elseif_Condition()
+  {
+    return (EAttribute)algorithm_elseifEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getalgorithm_elseif_ThenAlgorithmClauses()
+  {
+    return (EReference)algorithm_elseifEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getComment()
+  {
+    return commentEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getComment_String()
+  {
+    return (EAttribute)commentEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getComment_Annotation()
+  {
+    return (EReference)commentEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getAnnotation()
+  {
+    return annotationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getPublicElementList()
+  {
+    return publicElementListEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getProtectesElementList()
+  {
+    return protectesElementListEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getClassType()
+  {
+    return classTypeEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ModelicaBaseFactory getModelicaBaseFactory()
+  {
+    return (ModelicaBaseFactory)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
+    storageUnitEClass = createEClass(STORAGE_UNIT);
+    createEReference(storageUnitEClass, STORAGE_UNIT__CLASS_DEFINITION);
+
+    entityDefinitionEClass = createEClass(ENTITY_DEFINITION);
+    createEAttribute(entityDefinitionEClass, ENTITY_DEFINITION__NAME);
+
+    classDefinitionEClass = createEClass(CLASS_DEFINITION);
+    createEAttribute(classDefinitionEClass, CLASS_DEFINITION__ENCAPSULATED);
+    createEAttribute(classDefinitionEClass, CLASS_DEFINITION__PARTIAL);
+    createEAttribute(classDefinitionEClass, CLASS_DEFINITION__EXPANDABLE);
+    createEAttribute(classDefinitionEClass, CLASS_DEFINITION__CLASS_TYPE);
+    createEAttribute(classDefinitionEClass, CLASS_DEFINITION__COMMENT);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__MODIFICATION);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__ELEM_LIST);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__INITIAL_EQUATION_CLAUSES);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__INITIAL_ALGORITHM_CLAUSES);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__EQUATION_CLAUSES);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__ALGORITHM_CLAUSES);
+    createEReference(classDefinitionEClass, CLASS_DEFINITION__EXT_CLAUSE);
+
+    partialDerivativeEClass = createEClass(PARTIAL_DERIVATIVE);
+    createEReference(partialDerivativeEClass, PARTIAL_DERIVATIVE__COMMENT);
+
+    classModificationEClass = createEClass(CLASS_MODIFICATION);
+    createEAttribute(classModificationEClass, CLASS_MODIFICATION__CLASS_TYPE);
+    createEReference(classModificationEClass, CLASS_MODIFICATION__TYPE_SPECIFIER);
+    createEReference(classModificationEClass, CLASS_MODIFICATION__MODIFICATION);
+    createEReference(classModificationEClass, CLASS_MODIFICATION__COMMENT);
+    createEReference(classModificationEClass, CLASS_MODIFICATION__ARGUMENTS);
+
+    classOverloadingEClass = createEClass(CLASS_OVERLOADING);
+    createEAttribute(classOverloadingEClass, CLASS_OVERLOADING__CLASS_TYPE);
+    createEReference(classOverloadingEClass, CLASS_OVERLOADING__COMMENT);
+
+    enumerationEClass = createEClass(ENUMERATION);
+    createEAttribute(enumerationEClass, ENUMERATION__CLASS_TYPE);
+    createEAttribute(enumerationEClass, ENUMERATION__IDENT);
+    createEReference(enumerationEClass, ENUMERATION__ENUM_COMMENTS);
+    createEReference(enumerationEClass, ENUMERATION__COMMENT);
+
+    externalClauseEClass = createEClass(EXTERNAL_CLAUSE);
+    createEAttribute(externalClauseEClass, EXTERNAL_CLAUSE__LANGUAGE_SPECIFICATION);
+    createEReference(externalClauseEClass, EXTERNAL_CLAUSE__ANNOTATION);
+    createEReference(externalClauseEClass, EXTERNAL_CLAUSE__EXT_ANNOTATION);
+
+    elementListEClass = createEClass(ELEMENT_LIST);
+    createEReference(elementListEClass, ELEMENT_LIST__ELEMENTS);
+    createEReference(elementListEClass, ELEMENT_LIST__ANNOTATIONS);
+
+    classElementEClass = createEClass(CLASS_ELEMENT);
+
+    replaceableElementClauseEClass = createEClass(REPLACEABLE_ELEMENT_CLAUSE);
+    createEReference(replaceableElementClauseEClass, REPLACEABLE_ELEMENT_CLAUSE__ENTITY);
+    createEReference(replaceableElementClauseEClass, REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN);
+
+    importClauseEClass = createEClass(IMPORT_CLAUSE);
+    createEAttribute(importClauseEClass, IMPORT_CLAUSE__AS_NAME);
+    createEAttribute(importClauseEClass, IMPORT_CLAUSE__NAME);
+    createEReference(importClauseEClass, IMPORT_CLAUSE__COMMENT);
+
+    extendsClauseEClass = createEClass(EXTENDS_CLAUSE);
+    createEAttribute(extendsClauseEClass, EXTENDS_CLAUSE__BASE_CLASS);
+    createEReference(extendsClauseEClass, EXTENDS_CLAUSE__MODIFICATION);
+    createEReference(extendsClauseEClass, EXTENDS_CLAUSE__ANNOTATION);
+
+    constrainingClauseEClass = createEClass(CONSTRAINING_CLAUSE);
+    createEAttribute(constrainingClauseEClass, CONSTRAINING_CLAUSE__NAME);
+    createEReference(constrainingClauseEClass, CONSTRAINING_CLAUSE__MODIFICATION);
+    createEReference(constrainingClauseEClass, CONSTRAINING_CLAUSE__COMMENT);
+
+    componentClauseEClass = createEClass(COMPONENT_CLAUSE);
+    createEAttribute(componentClauseEClass, COMPONENT_CLAUSE__TYPE_PREFIX);
+    createEReference(componentClauseEClass, COMPONENT_CLAUSE__TYPE_SPECIFIER);
+    createEReference(componentClauseEClass, COMPONENT_CLAUSE__DECLARATIONS);
+
+    typeSpecifierEClass = createEClass(TYPE_SPECIFIER);
+    createEAttribute(typeSpecifierEClass, TYPE_SPECIFIER__NAME);
+    createEAttribute(typeSpecifierEClass, TYPE_SPECIFIER__SUBSCRIPTS);
+
+    componentDeclarationEClass = createEClass(COMPONENT_DECLARATION);
+    createEAttribute(componentDeclarationEClass, COMPONENT_DECLARATION__SUBSCRIPTS);
+    createEReference(componentDeclarationEClass, COMPONENT_DECLARATION__MODIFICATION);
+    createEAttribute(componentDeclarationEClass, COMPONENT_DECLARATION__CONDITION);
+    createEReference(componentDeclarationEClass, COMPONENT_DECLARATION__COMMENT);
+
+    modificationEClass = createEClass(MODIFICATION);
+    createEAttribute(modificationEClass, MODIFICATION__EXPRESSION);
+
+    simpleModificationEClass = createEClass(SIMPLE_MODIFICATION);
+
+    argumentEClass = createEClass(ARGUMENT);
+
+    elementModificationEClass = createEClass(ELEMENT_MODIFICATION);
+    createEAttribute(elementModificationEClass, ELEMENT_MODIFICATION__COMPONET_REF);
+    createEReference(elementModificationEClass, ELEMENT_MODIFICATION__MODIFICATION);
+    createEAttribute(elementModificationEClass, ELEMENT_MODIFICATION__COMMENT);
+
+    elementRedeclarationEClass = createEClass(ELEMENT_REDECLARATION);
+
+    elementReplaceableClauseEClass = createEClass(ELEMENT_REPLACEABLE_CLAUSE);
+    createEReference(elementReplaceableClauseEClass, ELEMENT_REPLACEABLE_CLAUSE__ELEMENT);
+    createEReference(elementReplaceableClauseEClass, ELEMENT_REPLACEABLE_CLAUSE__CONSTRAINT);
+
+    elementComponentClauseEClass = createEClass(ELEMENT_COMPONENT_CLAUSE);
+    createEAttribute(elementComponentClauseEClass, ELEMENT_COMPONENT_CLAUSE__TYPE_PREFIX);
+    createEReference(elementComponentClauseEClass, ELEMENT_COMPONENT_CLAUSE__TYPE_SPECIFIER);
+    createEAttribute(elementComponentClauseEClass, ELEMENT_COMPONENT_CLAUSE__SUBSCRIPTS);
+    createEReference(elementComponentClauseEClass, ELEMENT_COMPONENT_CLAUSE__MODIFICATION);
+    createEReference(elementComponentClauseEClass, ELEMENT_COMPONENT_CLAUSE__COMMENT);
+
+    equationClauseEClass = createEClass(EQUATION_CLAUSE);
+    createEReference(equationClauseEClass, EQUATION_CLAUSE__EQUATION_RULES);
+    createEReference(equationClauseEClass, EQUATION_CLAUSE__ANNOTATIONS);
+
+    algorithm_clauseEClass = createEClass(ALGORITHM_CLAUSE);
+    createEReference(algorithm_clauseEClass, ALGORITHM_CLAUSE__ALGORITHM_RULES);
+    createEReference(algorithm_clauseEClass, ALGORITHM_CLAUSE__ANNOTATIONS);
+
+    initial_equation_rule_clauseEClass = createEClass(INITIAL_EQUATION_RULE_CLAUSE);
+
+    initial_algorithm_clauseEClass = createEClass(INITIAL_ALGORITHM_CLAUSE);
+
+    equation_ruleEClass = createEClass(EQUATION_RULE);
+    createEReference(equation_ruleEClass, EQUATION_RULE__COMMENT);
+
+    algorithmEClass = createEClass(ALGORITHM);
+    createEReference(algorithmEClass, ALGORITHM__COMMENT);
+
+    conditionalEquationRuleEClass = createEClass(CONDITIONAL_EQUATION_RULE);
+    createEReference(conditionalEquationRuleEClass, CONDITIONAL_EQUATION_RULE__THEN_EQUATION_CLAUSES);
+    createEReference(conditionalEquationRuleEClass, CONDITIONAL_EQUATION_RULE__ELSEIF_CLAUSES);
+    createEReference(conditionalEquationRuleEClass, CONDITIONAL_EQUATION_RULE__ELSE_EQUATION_CLAUSES);
+
+    conditionAlgorithmRuleEClass = createEClass(CONDITION_ALGORITHM_RULE);
+    createEAttribute(conditionAlgorithmRuleEClass, CONDITION_ALGORITHM_RULE__CONDITION);
+    createEReference(conditionAlgorithmRuleEClass, CONDITION_ALGORITHM_RULE__THEN_ALGORITHM_CLAUSES);
+    createEReference(conditionAlgorithmRuleEClass, CONDITION_ALGORITHM_RULE__ELSEIF_CLAUSES);
+    createEReference(conditionAlgorithmRuleEClass, CONDITION_ALGORITHM_RULE__ELSE_ALGOTITHM_CLAUSES);
+
+    forEquationClauseEClass = createEClass(FOR_EQUATION_CLAUSE);
+    createEAttribute(forEquationClauseEClass, FOR_EQUATION_CLAUSE__FOR_INDICES);
+    createEReference(forEquationClauseEClass, FOR_EQUATION_CLAUSE__EQUATION_CLAUSES);
+
+    forAlgorithmClauseEClass = createEClass(FOR_ALGORITHM_CLAUSE);
+    createEAttribute(forAlgorithmClauseEClass, FOR_ALGORITHM_CLAUSE__FOR_INDICES);
+    createEReference(forAlgorithmClauseEClass, FOR_ALGORITHM_CLAUSE__ALGORITHM_CLAUSES);
+
+    whileClauseEClass = createEClass(WHILE_CLAUSE);
+    createEAttribute(whileClauseEClass, WHILE_CLAUSE__CONDITION);
+    createEReference(whileClauseEClass, WHILE_CLAUSE__ALGORITHM_CLAUSES);
+
+    when_clause_eEClass = createEClass(WHEN_CLAUSE_E);
+    createEAttribute(when_clause_eEClass, WHEN_CLAUSE_E__CONDITION);
+    createEReference(when_clause_eEClass, WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES);
+    createEReference(when_clause_eEClass, WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES);
+
+    else_when_eEClass = createEClass(ELSE_WHEN_E);
+    createEAttribute(else_when_eEClass, ELSE_WHEN_E__CONDITION);
+    createEReference(else_when_eEClass, ELSE_WHEN_E__THEN_EQUATION_CLAUSES);
+
+    when_clause_aEClass = createEClass(WHEN_CLAUSE_A);
+    createEAttribute(when_clause_aEClass, WHEN_CLAUSE_A__CONDITION);
+    createEReference(when_clause_aEClass, WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES);
+    createEReference(when_clause_aEClass, WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES);
+
+    else_when_aEClass = createEClass(ELSE_WHEN_A);
+    createEAttribute(else_when_aEClass, ELSE_WHEN_A__CONDITION);
+    createEReference(else_when_aEClass, ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES);
+
+    equation_rule_elseifEClass = createEClass(EQUATION_RULE_ELSEIF);
+    createEAttribute(equation_rule_elseifEClass, EQUATION_RULE_ELSEIF__CONDITION);
+    createEReference(equation_rule_elseifEClass, EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES);
+
+    algorithm_elseifEClass = createEClass(ALGORITHM_ELSEIF);
+    createEAttribute(algorithm_elseifEClass, ALGORITHM_ELSEIF__CONDITION);
+    createEReference(algorithm_elseifEClass, ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES);
+
+    commentEClass = createEClass(COMMENT);
+    createEAttribute(commentEClass, COMMENT__STRING);
+    createEReference(commentEClass, COMMENT__ANNOTATION);
+
+    annotationEClass = createEClass(ANNOTATION);
+
+    publicElementListEClass = createEClass(PUBLIC_ELEMENT_LIST);
+
+    protectesElementListEClass = createEClass(PROTECTES_ELEMENT_LIST);
+
+    // Create enums
+    classTypeEEnum = createEEnum(CLASS_TYPE);
+  }
+
+  /**
+   * <!-- 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);
+
+    // Create type parameters
+
+    // Set bounds for type parameters
+
+    // Add supertypes to classes
+    classDefinitionEClass.getESuperTypes().add(this.getEntityDefinition());
+    classDefinitionEClass.getESuperTypes().add(this.getClassElement());
+    classDefinitionEClass.getESuperTypes().add(this.getElementRedeclaration());
+    partialDerivativeEClass.getESuperTypes().add(this.getEntityDefinition());
+    classModificationEClass.getESuperTypes().add(this.getEntityDefinition());
+    classModificationEClass.getESuperTypes().add(this.getModification());
+    classModificationEClass.getESuperTypes().add(this.getAnnotation());
+    classOverloadingEClass.getESuperTypes().add(this.getEntityDefinition());
+    enumerationEClass.getESuperTypes().add(this.getEntityDefinition());
+    replaceableElementClauseEClass.getESuperTypes().add(this.getClassElement());
+    importClauseEClass.getESuperTypes().add(this.getClassElement());
+    extendsClauseEClass.getESuperTypes().add(this.getClassElement());
+    componentClauseEClass.getESuperTypes().add(this.getClassElement());
+    simpleModificationEClass.getESuperTypes().add(this.getModification());
+    elementModificationEClass.getESuperTypes().add(this.getargument());
+    elementRedeclarationEClass.getESuperTypes().add(this.getargument());
+    elementReplaceableClauseEClass.getESuperTypes().add(this.getargument());
+    elementReplaceableClauseEClass.getESuperTypes().add(this.getElementRedeclaration());
+    elementComponentClauseEClass.getESuperTypes().add(this.getElementRedeclaration());
+    equationClauseEClass.getESuperTypes().add(this.getinitial_equation_rule_clause());
+    algorithm_clauseEClass.getESuperTypes().add(this.getinitial_algorithm_clause());
+    conditionalEquationRuleEClass.getESuperTypes().add(this.getequation_rule());
+    conditionAlgorithmRuleEClass.getESuperTypes().add(this.getalgorithm());
+    forEquationClauseEClass.getESuperTypes().add(this.getequation_rule());
+    forAlgorithmClauseEClass.getESuperTypes().add(this.getalgorithm());
+    whileClauseEClass.getESuperTypes().add(this.getalgorithm());
+    when_clause_eEClass.getESuperTypes().add(this.getequation_rule());
+    when_clause_aEClass.getESuperTypes().add(this.getalgorithm());
+    publicElementListEClass.getESuperTypes().add(this.getElementList());
+    protectesElementListEClass.getESuperTypes().add(this.getElementList());
+
+    // Initialize classes and features; add operations and parameters
+    initEClass(storageUnitEClass, StorageUnit.class, "StorageUnit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getStorageUnit_ClassDefinition(), this.getClassDefinition(), null, "classDefinition", null, 0, -1, StorageUnit.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(entityDefinitionEClass, EntityDefinition.class, "EntityDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getEntityDefinition_Name(), ecorePackage.getEString(), "name", null, 0, 1, EntityDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(classDefinitionEClass, ClassDefinition.class, "ClassDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getClassDefinition_Encapsulated(), ecorePackage.getEBoolean(), "encapsulated", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getClassDefinition_Partial(), ecorePackage.getEBoolean(), "partial", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getClassDefinition_Expandable(), ecorePackage.getEBoolean(), "expandable", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getClassDefinition_ClassType(), this.getClassType(), "classType", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getClassDefinition_Comment(), ecorePackage.getEString(), "comment", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_Modification(), this.getClassModification(), null, "modification", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_ElemList(), this.getElementList(), null, "elemList", null, 0, -1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_InitialEquationClauses(), this.getinitial_equation_rule_clause(), null, "initialEquationClauses", null, 0, -1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_InitialAlgorithmClauses(), this.getinitial_algorithm_clause(), null, "initialAlgorithmClauses", null, 0, -1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_EquationClauses(), this.getEquationClause(), null, "equationClauses", null, 0, -1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_AlgorithmClauses(), this.getalgorithm_clause(), null, "algorithmClauses", null, 0, -1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassDefinition_ExtClause(), this.getExternalClause(), null, "extClause", null, 0, 1, ClassDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(partialDerivativeEClass, PartialDerivative.class, "PartialDerivative", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getPartialDerivative_Comment(), this.getComment(), null, "comment", null, 0, 1, PartialDerivative.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(classModificationEClass, ClassModification.class, "ClassModification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getClassModification_ClassType(), this.getClassType(), "classType", null, 0, 1, ClassModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassModification_TypeSpecifier(), this.getTypeSpecifier(), null, "typeSpecifier", null, 0, 1, ClassModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassModification_Modification(), this.getClassModification(), null, "modification", null, 0, 1, ClassModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassModification_Comment(), this.getComment(), null, "comment", null, 0, 1, ClassModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassModification_Arguments(), this.getargument(), null, "arguments", null, 0, -1, ClassModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(classOverloadingEClass, ClassOverloading.class, "ClassOverloading", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getClassOverloading_ClassType(), this.getClassType(), "classType", null, 0, 1, ClassOverloading.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getClassOverloading_Comment(), this.getComment(), null, "comment", null, 0, 1, ClassOverloading.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(enumerationEClass, Enumeration.class, "Enumeration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getEnumeration_ClassType(), this.getClassType(), "classType", null, 0, 1, Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getEnumeration_Ident(), ecorePackage.getEString(), "ident", null, 0, -1, Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEnumeration_EnumComments(), this.getComment(), null, "enumComments", null, 0, -1, Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEnumeration_Comment(), this.getComment(), null, "comment", null, 0, 1, Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(externalClauseEClass, ExternalClause.class, "ExternalClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getExternalClause_LanguageSpecification(), ecorePackage.getEString(), "languageSpecification", null, 0, 1, ExternalClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getExternalClause_Annotation(), this.getAnnotation(), null, "annotation", null, 0, 1, ExternalClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getExternalClause_ExtAnnotation(), this.getAnnotation(), null, "extAnnotation", null, 0, 1, ExternalClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(elementListEClass, ElementList.class, "ElementList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getElementList_Elements(), this.getClassElement(), null, "elements", null, 0, -1, ElementList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getElementList_Annotations(), this.getAnnotation(), null, "annotations", null, 0, -1, ElementList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(classElementEClass, ClassElement.class, "ClassElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(replaceableElementClauseEClass, ReplaceableElementClause.class, "ReplaceableElementClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getReplaceableElementClause_Entity(), this.getClassElement(), null, "entity", null, 0, 1, ReplaceableElementClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getReplaceableElementClause_Constrain(), this.getConstrainingClause(), null, "constrain", null, 0, 1, ReplaceableElementClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(importClauseEClass, ImportClause.class, "ImportClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getImportClause_AsName(), ecorePackage.getEString(), "asName", null, 0, 1, ImportClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getImportClause_Name(), ecorePackage.getEString(), "name", null, 0, 1, ImportClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getImportClause_Comment(), this.getComment(), null, "comment", null, 0, 1, ImportClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(extendsClauseEClass, ExtendsClause.class, "ExtendsClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getExtendsClause_BaseClass(), ecorePackage.getEString(), "baseClass", null, 0, 1, ExtendsClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getExtendsClause_Modification(), this.getClassModification(), null, "modification", null, 0, 1, ExtendsClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getExtendsClause_Annotation(), this.getAnnotation(), null, "annotation", null, 0, 1, ExtendsClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(constrainingClauseEClass, ConstrainingClause.class, "ConstrainingClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getConstrainingClause_Name(), ecorePackage.getEString(), "name", null, 0, 1, ConstrainingClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstrainingClause_Modification(), this.getClassModification(), null, "modification", null, 0, 1, ConstrainingClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConstrainingClause_Comment(), this.getComment(), null, "comment", null, 0, 1, ConstrainingClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(componentClauseEClass, ComponentClause.class, "ComponentClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getComponentClause_TypePrefix(), ecorePackage.getEString(), "typePrefix", null, 0, 1, ComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getComponentClause_TypeSpecifier(), this.getTypeSpecifier(), null, "typeSpecifier", null, 0, 1, ComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getComponentClause_Declarations(), this.getComponentDeclaration(), null, "declarations", null, 0, -1, ComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(typeSpecifierEClass, TypeSpecifier.class, "TypeSpecifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getTypeSpecifier_Name(), ecorePackage.getEString(), "name", null, 0, 1, TypeSpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getTypeSpecifier_Subscripts(), ecorePackage.getEString(), "subscripts", null, 0, 1, TypeSpecifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(componentDeclarationEClass, ComponentDeclaration.class, "ComponentDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getComponentDeclaration_Subscripts(), ecorePackage.getEString(), "subscripts", null, 0, 1, ComponentDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getComponentDeclaration_Modification(), this.getModification(), null, "modification", null, 0, 1, ComponentDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getComponentDeclaration_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, ComponentDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getComponentDeclaration_Comment(), this.getComment(), null, "comment", null, 0, 1, ComponentDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(modificationEClass, Modification.class, "Modification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getModification_Expression(), ecorePackage.getEString(), "expression", null, 0, 1, Modification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(simpleModificationEClass, SimpleModification.class, "SimpleModification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(argumentEClass, argument.class, "argument", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(elementModificationEClass, ElementModification.class, "ElementModification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getElementModification_ComponetRef(), ecorePackage.getEString(), "componetRef", null, 0, 1, ElementModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getElementModification_Modification(), this.getModification(), null, "modification", null, 0, 1, ElementModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getElementModification_Comment(), ecorePackage.getEString(), "comment", null, 0, 1, ElementModification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(elementRedeclarationEClass, ElementRedeclaration.class, "ElementRedeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(elementReplaceableClauseEClass, ElementReplaceableClause.class, "ElementReplaceableClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getElementReplaceableClause_Element(), this.getElementRedeclaration(), null, "element", null, 0, 1, ElementReplaceableClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getElementReplaceableClause_Constraint(), this.getConstrainingClause(), null, "constraint", null, 0, 1, ElementReplaceableClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(elementComponentClauseEClass, ElementComponentClause.class, "ElementComponentClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getElementComponentClause_TypePrefix(), ecorePackage.getEString(), "typePrefix", null, 0, 1, ElementComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getElementComponentClause_TypeSpecifier(), this.getTypeSpecifier(), null, "typeSpecifier", null, 0, 1, ElementComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getElementComponentClause_Subscripts(), ecorePackage.getEString(), "subscripts", null, 0, 1, ElementComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getElementComponentClause_Modification(), this.getModification(), null, "modification", null, 0, 1, ElementComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getElementComponentClause_Comment(), this.getComment(), null, "comment", null, 0, 1, ElementComponentClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(equationClauseEClass, EquationClause.class, "EquationClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getEquationClause_EquationRules(), this.getequation_rule(), null, "equationRules", null, 0, -1, EquationClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEquationClause_Annotations(), this.getAnnotation(), null, "annotations", null, 0, -1, EquationClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(algorithm_clauseEClass, algorithm_clause.class, "algorithm_clause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getalgorithm_clause_AlgorithmRules(), this.getalgorithm(), null, "algorithmRules", null, 0, -1, algorithm_clause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getalgorithm_clause_Annotations(), this.getAnnotation(), null, "annotations", null, 0, -1, algorithm_clause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(initial_equation_rule_clauseEClass, initial_equation_rule_clause.class, "initial_equation_rule_clause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(initial_algorithm_clauseEClass, initial_algorithm_clause.class, "initial_algorithm_clause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(equation_ruleEClass, equation_rule.class, "equation_rule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getequation_rule_Comment(), this.getComment(), null, "comment", null, 0, 1, equation_rule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(algorithmEClass, algorithm.class, "algorithm", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getalgorithm_Comment(), this.getComment(), null, "comment", null, 0, 1, algorithm.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(conditionalEquationRuleEClass, ConditionalEquationRule.class, "ConditionalEquationRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getConditionalEquationRule_ThenEquationClauses(), this.getequation_rule(), null, "thenEquationClauses", null, 0, -1, ConditionalEquationRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConditionalEquationRule_ElseifClauses(), this.getequation_rule_elseif(), null, "elseifClauses", null, 0, -1, ConditionalEquationRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConditionalEquationRule_ElseEquationClauses(), this.getequation_rule(), null, "elseEquationClauses", null, 0, -1, ConditionalEquationRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(conditionAlgorithmRuleEClass, ConditionAlgorithmRule.class, "ConditionAlgorithmRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getConditionAlgorithmRule_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, ConditionAlgorithmRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConditionAlgorithmRule_ThenAlgorithmClauses(), this.getalgorithm(), null, "thenAlgorithmClauses", null, 0, -1, ConditionAlgorithmRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConditionAlgorithmRule_ElseifClauses(), this.getalgorithm_elseif(), null, "elseifClauses", null, 0, -1, ConditionAlgorithmRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getConditionAlgorithmRule_ElseAlgotithmClauses(), this.getalgorithm(), null, "elseAlgotithmClauses", null, 0, -1, ConditionAlgorithmRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(forEquationClauseEClass, ForEquationClause.class, "ForEquationClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getForEquationClause_ForIndices(), ecorePackage.getEString(), "forIndices", null, 0, 1, ForEquationClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getForEquationClause_EquationClauses(), this.getequation_rule(), null, "equationClauses", null, 0, -1, ForEquationClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(forAlgorithmClauseEClass, ForAlgorithmClause.class, "ForAlgorithmClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getForAlgorithmClause_ForIndices(), ecorePackage.getEString(), "forIndices", null, 0, 1, ForAlgorithmClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getForAlgorithmClause_AlgorithmClauses(), this.getalgorithm(), null, "algorithmClauses", null, 0, -1, ForAlgorithmClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(whileClauseEClass, WhileClause.class, "WhileClause", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getWhileClause_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, WhileClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getWhileClause_AlgorithmClauses(), this.getalgorithm(), null, "algorithmClauses", null, 0, -1, WhileClause.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(when_clause_eEClass, when_clause_e.class, "when_clause_e", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getwhen_clause_e_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, when_clause_e.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getwhen_clause_e_ThenEquationClauses(), this.getequation_rule(), null, "thenEquationClauses", null, 0, -1, when_clause_e.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getwhen_clause_e_ElseWhenClauses(), this.getelse_when_e(), null, "elseWhenClauses", null, 0, -1, when_clause_e.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(else_when_eEClass, else_when_e.class, "else_when_e", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getelse_when_e_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, else_when_e.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getelse_when_e_ThenEquationClauses(), this.getequation_rule(), null, "thenEquationClauses", null, 0, -1, else_when_e.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(when_clause_aEClass, when_clause_a.class, "when_clause_a", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getwhen_clause_a_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, when_clause_a.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getwhen_clause_a_ThenAlgorithmClauses(), this.getequation_rule(), null, "thenAlgorithmClauses", null, 0, -1, when_clause_a.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getwhen_clause_a_ElseWhenClauses(), this.getelse_when_a(), null, "elseWhenClauses", null, 0, -1, when_clause_a.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(else_when_aEClass, else_when_a.class, "else_when_a", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getelse_when_a_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, else_when_a.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getelse_when_a_ThenAlgorithmClauses(), this.getequation_rule(), null, "thenAlgorithmClauses", null, 0, -1, else_when_a.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(equation_rule_elseifEClass, equation_rule_elseif.class, "equation_rule_elseif", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getequation_rule_elseif_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, equation_rule_elseif.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getequation_rule_elseif_ThenEquationClauses(), this.getequation_rule(), null, "thenEquationClauses", null, 0, -1, equation_rule_elseif.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(algorithm_elseifEClass, algorithm_elseif.class, "algorithm_elseif", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getalgorithm_elseif_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, algorithm_elseif.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getalgorithm_elseif_ThenAlgorithmClauses(), this.getequation_rule(), null, "thenAlgorithmClauses", null, 0, -1, algorithm_elseif.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(commentEClass, Comment.class, "Comment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getComment_String(), ecorePackage.getEString(), "string", null, 0, 1, Comment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getComment_Annotation(), this.getAnnotation(), null, "annotation", null, 0, 1, Comment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(annotationEClass, Annotation.class, "Annotation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(publicElementListEClass, PublicElementList.class, "PublicElementList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(protectesElementListEClass, ProtectesElementList.class, "ProtectesElementList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    // Initialize enums and add enum literals
+    initEEnum(classTypeEEnum, ClassType.class, "ClassType");
+    addEEnumLiteral(classTypeEEnum, ClassType.CLASS);
+    addEEnumLiteral(classTypeEEnum, ClassType.MODEL);
+    addEEnumLiteral(classTypeEEnum, ClassType.RECORD);
+    addEEnumLiteral(classTypeEEnum, ClassType.BLOCK);
+    addEEnumLiteral(classTypeEEnum, ClassType.CONNECTOR);
+    addEEnumLiteral(classTypeEEnum, ClassType.TYPE);
+    addEEnumLiteral(classTypeEEnum, ClassType.PACKAGE);
+    addEEnumLiteral(classTypeEEnum, ClassType.FUNCTION);
+
+    // Create resource
+    createResource(eNS_URI);
+  }
+
+} //ModelicaBasePackageImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModificationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModificationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ModificationImpl.java	(revision 540)
@@ -0,0 +1,180 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.Modification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Modification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ModificationImpl#getExpression <em>Expression</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ModificationImpl extends MinimalEObjectImpl.Container implements Modification
+{
+  /**
+   * The default value of the '{@link #getExpression() <em>Expression</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExpression()
+   * @generated
+   * @ordered
+   */
+  protected static final String EXPRESSION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getExpression() <em>Expression</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExpression()
+   * @generated
+   * @ordered
+   */
+  protected String expression = EXPRESSION_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ModificationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.MODIFICATION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getExpression()
+  {
+    return expression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExpression(String newExpression)
+  {
+    String oldExpression = expression;
+    expression = newExpression;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.MODIFICATION__EXPRESSION, oldExpression, expression));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.MODIFICATION__EXPRESSION:
+        return getExpression();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.MODIFICATION__EXPRESSION:
+        setExpression((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.MODIFICATION__EXPRESSION:
+        setExpression(EXPRESSION_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.MODIFICATION__EXPRESSION:
+        return EXPRESSION_EDEFAULT == null ? expression != null : !EXPRESSION_EDEFAULT.equals(expression);
+    }
+    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(" (expression: ");
+    result.append(expression);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ModificationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/PartialDerivativeImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/PartialDerivativeImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/PartialDerivativeImpl.java	(revision 540)
@@ -0,0 +1,196 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.PartialDerivative;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Partial Derivative</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.PartialDerivativeImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PartialDerivativeImpl extends EntityDefinitionImpl implements PartialDerivative
+{
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected PartialDerivativeImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.PARTIAL_DERIVATIVE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.PARTIAL_DERIVATIVE__COMMENT:
+        return comment != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //PartialDerivativeImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ProtectesElementListImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ProtectesElementListImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ProtectesElementListImpl.java	(revision 540)
@@ -0,0 +1,45 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.ProtectesElementList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Protectes Element List</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ProtectesElementListImpl extends ElementListImpl implements ProtectesElementList
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ProtectesElementListImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.PROTECTES_ELEMENT_LIST;
+  }
+
+} //ProtectesElementListImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/PublicElementListImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/PublicElementListImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/PublicElementListImpl.java	(revision 540)
@@ -0,0 +1,45 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.PublicElementList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Public Element List</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PublicElementListImpl extends ElementListImpl implements PublicElementList
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected PublicElementListImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.PUBLIC_ELEMENT_LIST;
+  }
+
+} //PublicElementListImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ReplaceableElementClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ReplaceableElementClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/ReplaceableElementClauseImpl.java	(revision 540)
@@ -0,0 +1,268 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ClassElement;
+import org.modelica.xtext.modelicaBase.ConstrainingClause;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.ReplaceableElementClause;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Replaceable Element Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ReplaceableElementClauseImpl#getEntity <em>Entity</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.ReplaceableElementClauseImpl#getConstrain <em>Constrain</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ReplaceableElementClauseImpl extends ClassElementImpl implements ReplaceableElementClause
+{
+  /**
+   * The cached value of the '{@link #getEntity() <em>Entity</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEntity()
+   * @generated
+   * @ordered
+   */
+  protected ClassElement entity;
+
+  /**
+   * The cached value of the '{@link #getConstrain() <em>Constrain</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getConstrain()
+   * @generated
+   * @ordered
+   */
+  protected ConstrainingClause constrain;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ReplaceableElementClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.REPLACEABLE_ELEMENT_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ClassElement getEntity()
+  {
+    return entity;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetEntity(ClassElement newEntity, NotificationChain msgs)
+  {
+    ClassElement oldEntity = entity;
+    entity = newEntity;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY, oldEntity, newEntity);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setEntity(ClassElement newEntity)
+  {
+    if (newEntity != entity)
+    {
+      NotificationChain msgs = null;
+      if (entity != null)
+        msgs = ((InternalEObject)entity).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY, null, msgs);
+      if (newEntity != null)
+        msgs = ((InternalEObject)newEntity).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY, null, msgs);
+      msgs = basicSetEntity(newEntity, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY, newEntity, newEntity));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ConstrainingClause getConstrain()
+  {
+    return constrain;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetConstrain(ConstrainingClause newConstrain, NotificationChain msgs)
+  {
+    ConstrainingClause oldConstrain = constrain;
+    constrain = newConstrain;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN, oldConstrain, newConstrain);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setConstrain(ConstrainingClause newConstrain)
+  {
+    if (newConstrain != constrain)
+    {
+      NotificationChain msgs = null;
+      if (constrain != null)
+        msgs = ((InternalEObject)constrain).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN, null, msgs);
+      if (newConstrain != null)
+        msgs = ((InternalEObject)newConstrain).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN, null, msgs);
+      msgs = basicSetConstrain(newConstrain, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN, newConstrain, newConstrain));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY:
+        return basicSetEntity(null, msgs);
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN:
+        return basicSetConstrain(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 ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY:
+        return getEntity();
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN:
+        return getConstrain();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY:
+        setEntity((ClassElement)newValue);
+        return;
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN:
+        setConstrain((ConstrainingClause)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY:
+        setEntity((ClassElement)null);
+        return;
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN:
+        setConstrain((ConstrainingClause)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__ENTITY:
+        return entity != null;
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE__CONSTRAIN:
+        return constrain != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ReplaceableElementClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/SimpleModificationImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/SimpleModificationImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/SimpleModificationImpl.java	(revision 540)
@@ -0,0 +1,45 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.SimpleModification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Simple Modification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class SimpleModificationImpl extends ModificationImpl implements SimpleModification
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected SimpleModificationImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.SIMPLE_MODIFICATION;
+  }
+
+} //SimpleModificationImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/StorageUnitImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/StorageUnitImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/StorageUnitImpl.java	(revision 540)
@@ -0,0 +1,170 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ClassDefinition;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.StorageUnit;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Storage Unit</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.StorageUnitImpl#getClassDefinition <em>Class Definition</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StorageUnitImpl extends MinimalEObjectImpl.Container implements StorageUnit
+{
+  /**
+   * The cached value of the '{@link #getClassDefinition() <em>Class Definition</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getClassDefinition()
+   * @generated
+   * @ordered
+   */
+  protected EList<ClassDefinition> classDefinition;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected StorageUnitImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.STORAGE_UNIT;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<ClassDefinition> getClassDefinition()
+  {
+    if (classDefinition == null)
+    {
+      classDefinition = new EObjectContainmentEList<ClassDefinition>(ClassDefinition.class, this, ModelicaBasePackage.STORAGE_UNIT__CLASS_DEFINITION);
+    }
+    return classDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.STORAGE_UNIT__CLASS_DEFINITION:
+        return ((InternalEList<?>)getClassDefinition()).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 ModelicaBasePackage.STORAGE_UNIT__CLASS_DEFINITION:
+        return getClassDefinition();
+    }
+    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 ModelicaBasePackage.STORAGE_UNIT__CLASS_DEFINITION:
+        getClassDefinition().clear();
+        getClassDefinition().addAll((Collection<? extends ClassDefinition>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.STORAGE_UNIT__CLASS_DEFINITION:
+        getClassDefinition().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.STORAGE_UNIT__CLASS_DEFINITION:
+        return classDefinition != null && !classDefinition.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //StorageUnitImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/TypeSpecifierImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/TypeSpecifierImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/TypeSpecifierImpl.java	(revision 540)
@@ -0,0 +1,236 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.TypeSpecifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Type Specifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.TypeSpecifierImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.TypeSpecifierImpl#getSubscripts <em>Subscripts</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TypeSpecifierImpl extends MinimalEObjectImpl.Container implements TypeSpecifier
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getSubscripts() <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSubscripts()
+   * @generated
+   * @ordered
+   */
+  protected static final String SUBSCRIPTS_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getSubscripts() <em>Subscripts</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSubscripts()
+   * @generated
+   * @ordered
+   */
+  protected String subscripts = SUBSCRIPTS_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected TypeSpecifierImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.TYPE_SPECIFIER;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.TYPE_SPECIFIER__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getSubscripts()
+  {
+    return subscripts;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSubscripts(String newSubscripts)
+  {
+    String oldSubscripts = subscripts;
+    subscripts = newSubscripts;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.TYPE_SPECIFIER__SUBSCRIPTS, oldSubscripts, subscripts));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.TYPE_SPECIFIER__NAME:
+        return getName();
+      case ModelicaBasePackage.TYPE_SPECIFIER__SUBSCRIPTS:
+        return getSubscripts();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.TYPE_SPECIFIER__NAME:
+        setName((String)newValue);
+        return;
+      case ModelicaBasePackage.TYPE_SPECIFIER__SUBSCRIPTS:
+        setSubscripts((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.TYPE_SPECIFIER__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case ModelicaBasePackage.TYPE_SPECIFIER__SUBSCRIPTS:
+        setSubscripts(SUBSCRIPTS_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.TYPE_SPECIFIER__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case ModelicaBasePackage.TYPE_SPECIFIER__SUBSCRIPTS:
+        return SUBSCRIPTS_EDEFAULT == null ? subscripts != null : !SUBSCRIPTS_EDEFAULT.equals(subscripts);
+    }
+    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(" (name: ");
+    result.append(name);
+    result.append(", subscripts: ");
+    result.append(subscripts);
+    result.append(')');
+    return result.toString();
+  }
+
+} //TypeSpecifierImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/WhileClauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/WhileClauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/WhileClauseImpl.java	(revision 540)
@@ -0,0 +1,242 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.WhileClause;
+import org.modelica.xtext.modelicaBase.algorithm;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>While Clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.WhileClauseImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.WhileClauseImpl#getAlgorithmClauses <em>Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class WhileClauseImpl extends algorithmImpl implements WhileClause
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getAlgorithmClauses() <em>Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm> algorithmClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected WhileClauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.WHILE_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.WHILE_CLAUSE__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm> getAlgorithmClauses()
+  {
+    if (algorithmClauses == null)
+    {
+      algorithmClauses = new EObjectContainmentEList<algorithm>(algorithm.class, this, ModelicaBasePackage.WHILE_CLAUSE__ALGORITHM_CLAUSES);
+    }
+    return algorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHILE_CLAUSE__ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getAlgorithmClauses()).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 ModelicaBasePackage.WHILE_CLAUSE__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.WHILE_CLAUSE__ALGORITHM_CLAUSES:
+        return getAlgorithmClauses();
+    }
+    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 ModelicaBasePackage.WHILE_CLAUSE__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.WHILE_CLAUSE__ALGORITHM_CLAUSES:
+        getAlgorithmClauses().clear();
+        getAlgorithmClauses().addAll((Collection<? extends algorithm>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHILE_CLAUSE__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.WHILE_CLAUSE__ALGORITHM_CLAUSES:
+        getAlgorithmClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHILE_CLAUSE__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.WHILE_CLAUSE__ALGORITHM_CLAUSES:
+        return algorithmClauses != null && !algorithmClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //WhileClauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithmImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithmImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithmImpl.java	(revision 540)
@@ -0,0 +1,197 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.algorithm;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>algorithm</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.algorithmImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class algorithmImpl extends MinimalEObjectImpl.Container implements algorithm
+{
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected algorithmImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ALGORITHM;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ALGORITHM__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ALGORITHM__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.ALGORITHM__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ALGORITHM__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.ALGORITHM__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM__COMMENT:
+        return comment != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //algorithmImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithm_clauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithm_clauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithm_clauseImpl.java	(revision 540)
@@ -0,0 +1,207 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.Annotation;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.algorithm;
+import org.modelica.xtext.modelicaBase.algorithm_clause;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>algorithm clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.algorithm_clauseImpl#getAlgorithmRules <em>Algorithm Rules</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.algorithm_clauseImpl#getAnnotations <em>Annotations</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class algorithm_clauseImpl extends initial_algorithm_clauseImpl implements algorithm_clause
+{
+  /**
+   * The cached value of the '{@link #getAlgorithmRules() <em>Algorithm Rules</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAlgorithmRules()
+   * @generated
+   * @ordered
+   */
+  protected EList<algorithm> algorithmRules;
+
+  /**
+   * The cached value of the '{@link #getAnnotations() <em>Annotations</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAnnotations()
+   * @generated
+   * @ordered
+   */
+  protected EList<Annotation> annotations;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected algorithm_clauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ALGORITHM_CLAUSE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<algorithm> getAlgorithmRules()
+  {
+    if (algorithmRules == null)
+    {
+      algorithmRules = new EObjectContainmentEList<algorithm>(algorithm.class, this, ModelicaBasePackage.ALGORITHM_CLAUSE__ALGORITHM_RULES);
+    }
+    return algorithmRules;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Annotation> getAnnotations()
+  {
+    if (annotations == null)
+    {
+      annotations = new EObjectContainmentEList<Annotation>(Annotation.class, this, ModelicaBasePackage.ALGORITHM_CLAUSE__ANNOTATIONS);
+    }
+    return annotations;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ALGORITHM_RULES:
+        return ((InternalEList<?>)getAlgorithmRules()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ANNOTATIONS:
+        return ((InternalEList<?>)getAnnotations()).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 ModelicaBasePackage.ALGORITHM_CLAUSE__ALGORITHM_RULES:
+        return getAlgorithmRules();
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ANNOTATIONS:
+        return getAnnotations();
+    }
+    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 ModelicaBasePackage.ALGORITHM_CLAUSE__ALGORITHM_RULES:
+        getAlgorithmRules().clear();
+        getAlgorithmRules().addAll((Collection<? extends algorithm>)newValue);
+        return;
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ANNOTATIONS:
+        getAnnotations().clear();
+        getAnnotations().addAll((Collection<? extends Annotation>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ALGORITHM_RULES:
+        getAlgorithmRules().clear();
+        return;
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ANNOTATIONS:
+        getAnnotations().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ALGORITHM_RULES:
+        return algorithmRules != null && !algorithmRules.isEmpty();
+      case ModelicaBasePackage.ALGORITHM_CLAUSE__ANNOTATIONS:
+        return annotations != null && !annotations.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //algorithm_clauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithm_elseifImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithm_elseifImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/algorithm_elseifImpl.java	(revision 540)
@@ -0,0 +1,243 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.algorithm_elseif;
+import org.modelica.xtext.modelicaBase.equation_rule;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>algorithm elseif</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.algorithm_elseifImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.algorithm_elseifImpl#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class algorithm_elseifImpl extends MinimalEObjectImpl.Container implements algorithm_elseif
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenAlgorithmClauses() <em>Then Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenAlgorithmClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected algorithm_elseifImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ALGORITHM_ELSEIF;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ALGORITHM_ELSEIF__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenAlgorithmClauses()
+  {
+    if (thenAlgorithmClauses == null)
+    {
+      thenAlgorithmClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES);
+    }
+    return thenAlgorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getThenAlgorithmClauses()).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 ModelicaBasePackage.ALGORITHM_ELSEIF__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES:
+        return getThenAlgorithmClauses();
+    }
+    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 ModelicaBasePackage.ALGORITHM_ELSEIF__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        getThenAlgorithmClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.ALGORITHM_ELSEIF__THEN_ALGORITHM_CLAUSES:
+        return thenAlgorithmClauses != null && !thenAlgorithmClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //algorithm_elseifImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/argumentImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/argumentImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/argumentImpl.java	(revision 540)
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.argument;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>argument</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class argumentImpl extends MinimalEObjectImpl.Container implements argument
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected argumentImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ARGUMENT;
+  }
+
+} //argumentImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/else_when_aImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/else_when_aImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/else_when_aImpl.java	(revision 540)
@@ -0,0 +1,243 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.else_when_a;
+import org.modelica.xtext.modelicaBase.equation_rule;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>else when a</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.else_when_aImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.else_when_aImpl#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class else_when_aImpl extends MinimalEObjectImpl.Container implements else_when_a
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenAlgorithmClauses() <em>Then Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenAlgorithmClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected else_when_aImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELSE_WHEN_A;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELSE_WHEN_A__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenAlgorithmClauses()
+  {
+    if (thenAlgorithmClauses == null)
+    {
+      thenAlgorithmClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES);
+    }
+    return thenAlgorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getThenAlgorithmClauses()).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 ModelicaBasePackage.ELSE_WHEN_A__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES:
+        return getThenAlgorithmClauses();
+    }
+    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 ModelicaBasePackage.ELSE_WHEN_A__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        getThenAlgorithmClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELSE_WHEN_A__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELSE_WHEN_A__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.ELSE_WHEN_A__THEN_ALGORITHM_CLAUSES:
+        return thenAlgorithmClauses != null && !thenAlgorithmClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //else_when_aImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/else_when_eImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/else_when_eImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/else_when_eImpl.java	(revision 540)
@@ -0,0 +1,243 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.else_when_e;
+import org.modelica.xtext.modelicaBase.equation_rule;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>else when e</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.else_when_eImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.else_when_eImpl#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class else_when_eImpl extends MinimalEObjectImpl.Container implements else_when_e
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenEquationClauses() <em>Then Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenEquationClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected else_when_eImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.ELSE_WHEN_E;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.ELSE_WHEN_E__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenEquationClauses()
+  {
+    if (thenEquationClauses == null)
+    {
+      thenEquationClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.ELSE_WHEN_E__THEN_EQUATION_CLAUSES);
+    }
+    return thenEquationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELSE_WHEN_E__THEN_EQUATION_CLAUSES:
+        return ((InternalEList<?>)getThenEquationClauses()).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 ModelicaBasePackage.ELSE_WHEN_E__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.ELSE_WHEN_E__THEN_EQUATION_CLAUSES:
+        return getThenEquationClauses();
+    }
+    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 ModelicaBasePackage.ELSE_WHEN_E__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.ELSE_WHEN_E__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        getThenEquationClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELSE_WHEN_E__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.ELSE_WHEN_E__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.ELSE_WHEN_E__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.ELSE_WHEN_E__THEN_EQUATION_CLAUSES:
+        return thenEquationClauses != null && !thenEquationClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //else_when_eImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/equation_ruleImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/equation_ruleImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/equation_ruleImpl.java	(revision 540)
@@ -0,0 +1,197 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.Comment;
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.equation_rule;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>equation rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.equation_ruleImpl#getComment <em>Comment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class equation_ruleImpl extends MinimalEObjectImpl.Container implements equation_rule
+{
+  /**
+   * The cached value of the '{@link #getComment() <em>Comment</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getComment()
+   * @generated
+   * @ordered
+   */
+  protected Comment comment;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected equation_ruleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.EQUATION_RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Comment getComment()
+  {
+    return comment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetComment(Comment newComment, NotificationChain msgs)
+  {
+    Comment oldComment = comment;
+    comment = newComment;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EQUATION_RULE__COMMENT, oldComment, newComment);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setComment(Comment newComment)
+  {
+    if (newComment != comment)
+    {
+      NotificationChain msgs = null;
+      if (comment != null)
+        msgs = ((InternalEObject)comment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EQUATION_RULE__COMMENT, null, msgs);
+      if (newComment != null)
+        msgs = ((InternalEObject)newComment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ModelicaBasePackage.EQUATION_RULE__COMMENT, null, msgs);
+      msgs = basicSetComment(newComment, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EQUATION_RULE__COMMENT, newComment, newComment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE__COMMENT:
+        return basicSetComment(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 ModelicaBasePackage.EQUATION_RULE__COMMENT:
+        return getComment();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE__COMMENT:
+        setComment((Comment)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE__COMMENT:
+        setComment((Comment)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE__COMMENT:
+        return comment != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //equation_ruleImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/equation_rule_elseifImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/equation_rule_elseifImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/equation_rule_elseifImpl.java	(revision 540)
@@ -0,0 +1,243 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.equation_rule;
+import org.modelica.xtext.modelicaBase.equation_rule_elseif;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>equation rule elseif</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.equation_rule_elseifImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.equation_rule_elseifImpl#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class equation_rule_elseifImpl extends MinimalEObjectImpl.Container implements equation_rule_elseif
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenEquationClauses() <em>Then Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenEquationClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected equation_rule_elseifImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.EQUATION_RULE_ELSEIF;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.EQUATION_RULE_ELSEIF__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenEquationClauses()
+  {
+    if (thenEquationClauses == null)
+    {
+      thenEquationClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES);
+    }
+    return thenEquationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES:
+        return ((InternalEList<?>)getThenEquationClauses()).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 ModelicaBasePackage.EQUATION_RULE_ELSEIF__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES:
+        return getThenEquationClauses();
+    }
+    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 ModelicaBasePackage.EQUATION_RULE_ELSEIF__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        getThenEquationClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF__THEN_EQUATION_CLAUSES:
+        return thenEquationClauses != null && !thenEquationClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //equation_rule_elseifImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/initial_algorithm_clauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/initial_algorithm_clauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/initial_algorithm_clauseImpl.java	(revision 540)
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.initial_algorithm_clause;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>initial algorithm clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class initial_algorithm_clauseImpl extends MinimalEObjectImpl.Container implements initial_algorithm_clause
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected initial_algorithm_clauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.INITIAL_ALGORITHM_CLAUSE;
+  }
+
+} //initial_algorithm_clauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/initial_equation_rule_clauseImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/initial_equation_rule_clauseImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/initial_equation_rule_clauseImpl.java	(revision 540)
@@ -0,0 +1,47 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.initial_equation_rule_clause;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>initial equation rule clause</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class initial_equation_rule_clauseImpl extends MinimalEObjectImpl.Container implements initial_equation_rule_clause
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected initial_equation_rule_clauseImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.INITIAL_EQUATION_RULE_CLAUSE;
+  }
+
+} //initial_equation_rule_clauseImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/when_clause_aImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/when_clause_aImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/when_clause_aImpl.java	(revision 540)
@@ -0,0 +1,281 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.else_when_a;
+import org.modelica.xtext.modelicaBase.equation_rule;
+import org.modelica.xtext.modelicaBase.when_clause_a;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>when clause a</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.when_clause_aImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.when_clause_aImpl#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.when_clause_aImpl#getElseWhenClauses <em>Else When Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class when_clause_aImpl extends algorithmImpl implements when_clause_a
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenAlgorithmClauses() <em>Then Algorithm Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenAlgorithmClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenAlgorithmClauses;
+
+  /**
+   * The cached value of the '{@link #getElseWhenClauses() <em>Else When Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElseWhenClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<else_when_a> elseWhenClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected when_clause_aImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.WHEN_CLAUSE_A;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.WHEN_CLAUSE_A__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenAlgorithmClauses()
+  {
+    if (thenAlgorithmClauses == null)
+    {
+      thenAlgorithmClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES);
+    }
+    return thenAlgorithmClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<else_when_a> getElseWhenClauses()
+  {
+    if (elseWhenClauses == null)
+    {
+      elseWhenClauses = new EObjectContainmentEList<else_when_a>(else_when_a.class, this, ModelicaBasePackage.WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES);
+    }
+    return elseWhenClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES:
+        return ((InternalEList<?>)getThenAlgorithmClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES:
+        return ((InternalEList<?>)getElseWhenClauses()).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 ModelicaBasePackage.WHEN_CLAUSE_A__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES:
+        return getThenAlgorithmClauses();
+      case ModelicaBasePackage.WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES:
+        return getElseWhenClauses();
+    }
+    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 ModelicaBasePackage.WHEN_CLAUSE_A__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        getThenAlgorithmClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES:
+        getElseWhenClauses().clear();
+        getElseWhenClauses().addAll((Collection<? extends else_when_a>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHEN_CLAUSE_A__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES:
+        getThenAlgorithmClauses().clear();
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES:
+        getElseWhenClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHEN_CLAUSE_A__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.WHEN_CLAUSE_A__THEN_ALGORITHM_CLAUSES:
+        return thenAlgorithmClauses != null && !thenAlgorithmClauses.isEmpty();
+      case ModelicaBasePackage.WHEN_CLAUSE_A__ELSE_WHEN_CLAUSES:
+        return elseWhenClauses != null && !elseWhenClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //when_clause_aImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/when_clause_eImpl.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/when_clause_eImpl.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/impl/when_clause_eImpl.java	(revision 540)
@@ -0,0 +1,281 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+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.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.modelica.xtext.modelicaBase.ModelicaBasePackage;
+import org.modelica.xtext.modelicaBase.else_when_e;
+import org.modelica.xtext.modelicaBase.equation_rule;
+import org.modelica.xtext.modelicaBase.when_clause_e;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>when clause e</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.when_clause_eImpl#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.when_clause_eImpl#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.impl.when_clause_eImpl#getElseWhenClauses <em>Else When Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class when_clause_eImpl extends equation_ruleImpl implements when_clause_e
+{
+  /**
+   * The default value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected static final String CONDITION_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getCondition() <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getCondition()
+   * @generated
+   * @ordered
+   */
+  protected String condition = CONDITION_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getThenEquationClauses() <em>Then Equation Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getThenEquationClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<equation_rule> thenEquationClauses;
+
+  /**
+   * The cached value of the '{@link #getElseWhenClauses() <em>Else When Clauses</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElseWhenClauses()
+   * @generated
+   * @ordered
+   */
+  protected EList<else_when_e> elseWhenClauses;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected when_clause_eImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return ModelicaBasePackage.Literals.WHEN_CLAUSE_E;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getCondition()
+  {
+    return condition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setCondition(String newCondition)
+  {
+    String oldCondition = condition;
+    condition = newCondition;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, ModelicaBasePackage.WHEN_CLAUSE_E__CONDITION, oldCondition, condition));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<equation_rule> getThenEquationClauses()
+  {
+    if (thenEquationClauses == null)
+    {
+      thenEquationClauses = new EObjectContainmentEList<equation_rule>(equation_rule.class, this, ModelicaBasePackage.WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES);
+    }
+    return thenEquationClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<else_when_e> getElseWhenClauses()
+  {
+    if (elseWhenClauses == null)
+    {
+      elseWhenClauses = new EObjectContainmentEList<else_when_e>(else_when_e.class, this, ModelicaBasePackage.WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES);
+    }
+    return elseWhenClauses;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES:
+        return ((InternalEList<?>)getThenEquationClauses()).basicRemove(otherEnd, msgs);
+      case ModelicaBasePackage.WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES:
+        return ((InternalEList<?>)getElseWhenClauses()).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 ModelicaBasePackage.WHEN_CLAUSE_E__CONDITION:
+        return getCondition();
+      case ModelicaBasePackage.WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES:
+        return getThenEquationClauses();
+      case ModelicaBasePackage.WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES:
+        return getElseWhenClauses();
+    }
+    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 ModelicaBasePackage.WHEN_CLAUSE_E__CONDITION:
+        setCondition((String)newValue);
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        getThenEquationClauses().addAll((Collection<? extends equation_rule>)newValue);
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES:
+        getElseWhenClauses().clear();
+        getElseWhenClauses().addAll((Collection<? extends else_when_e>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHEN_CLAUSE_E__CONDITION:
+        setCondition(CONDITION_EDEFAULT);
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES:
+        getThenEquationClauses().clear();
+        return;
+      case ModelicaBasePackage.WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES:
+        getElseWhenClauses().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case ModelicaBasePackage.WHEN_CLAUSE_E__CONDITION:
+        return CONDITION_EDEFAULT == null ? condition != null : !CONDITION_EDEFAULT.equals(condition);
+      case ModelicaBasePackage.WHEN_CLAUSE_E__THEN_EQUATION_CLAUSES:
+        return thenEquationClauses != null && !thenEquationClauses.isEmpty();
+      case ModelicaBasePackage.WHEN_CLAUSE_E__ELSE_WHEN_CLAUSES:
+        return elseWhenClauses != null && !elseWhenClauses.isEmpty();
+    }
+    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(" (condition: ");
+    result.append(condition);
+    result.append(')');
+    return result.toString();
+  }
+
+} //when_clause_eImpl
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/initial_algorithm_clause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/initial_algorithm_clause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/initial_algorithm_clause.java	(revision 540)
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>initial algorithm clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getinitial_algorithm_clause()
+ * @model
+ * @generated
+ */
+public interface initial_algorithm_clause extends EObject
+{
+} // initial_algorithm_clause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/initial_equation_rule_clause.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/initial_equation_rule_clause.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/initial_equation_rule_clause.java	(revision 540)
@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>initial equation rule clause</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getinitial_equation_rule_clause()
+ * @model
+ * @generated
+ */
+public interface initial_equation_rule_clause extends EObject
+{
+} // initial_equation_rule_clause
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/util/ModelicaBaseAdapterFactory.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/util/ModelicaBaseAdapterFactory.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/util/ModelicaBaseAdapterFactory.java	(revision 540)
@@ -0,0 +1,1015 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.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.modelica.xtext.modelicaBase.*;
+
+/**
+ * <!-- 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.modelica.xtext.modelicaBase.ModelicaBasePackage
+ * @generated
+ */
+public class ModelicaBaseAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static ModelicaBasePackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ModelicaBaseAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = ModelicaBasePackage.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 ModelicaBaseSwitch<Adapter> modelSwitch =
+    new ModelicaBaseSwitch<Adapter>()
+    {
+      @Override
+      public Adapter caseStorageUnit(StorageUnit object)
+      {
+        return createStorageUnitAdapter();
+      }
+      @Override
+      public Adapter caseEntityDefinition(EntityDefinition object)
+      {
+        return createEntityDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseClassDefinition(ClassDefinition object)
+      {
+        return createClassDefinitionAdapter();
+      }
+      @Override
+      public Adapter casePartialDerivative(PartialDerivative object)
+      {
+        return createPartialDerivativeAdapter();
+      }
+      @Override
+      public Adapter caseClassModification(ClassModification object)
+      {
+        return createClassModificationAdapter();
+      }
+      @Override
+      public Adapter caseClassOverloading(ClassOverloading object)
+      {
+        return createClassOverloadingAdapter();
+      }
+      @Override
+      public Adapter caseEnumeration(Enumeration object)
+      {
+        return createEnumerationAdapter();
+      }
+      @Override
+      public Adapter caseExternalClause(ExternalClause object)
+      {
+        return createExternalClauseAdapter();
+      }
+      @Override
+      public Adapter caseElementList(ElementList object)
+      {
+        return createElementListAdapter();
+      }
+      @Override
+      public Adapter caseClassElement(ClassElement object)
+      {
+        return createClassElementAdapter();
+      }
+      @Override
+      public Adapter caseReplaceableElementClause(ReplaceableElementClause object)
+      {
+        return createReplaceableElementClauseAdapter();
+      }
+      @Override
+      public Adapter caseImportClause(ImportClause object)
+      {
+        return createImportClauseAdapter();
+      }
+      @Override
+      public Adapter caseExtendsClause(ExtendsClause object)
+      {
+        return createExtendsClauseAdapter();
+      }
+      @Override
+      public Adapter caseConstrainingClause(ConstrainingClause object)
+      {
+        return createConstrainingClauseAdapter();
+      }
+      @Override
+      public Adapter caseComponentClause(ComponentClause object)
+      {
+        return createComponentClauseAdapter();
+      }
+      @Override
+      public Adapter caseTypeSpecifier(TypeSpecifier object)
+      {
+        return createTypeSpecifierAdapter();
+      }
+      @Override
+      public Adapter caseComponentDeclaration(ComponentDeclaration object)
+      {
+        return createComponentDeclarationAdapter();
+      }
+      @Override
+      public Adapter caseModification(Modification object)
+      {
+        return createModificationAdapter();
+      }
+      @Override
+      public Adapter caseSimpleModification(SimpleModification object)
+      {
+        return createSimpleModificationAdapter();
+      }
+      @Override
+      public Adapter caseargument(argument object)
+      {
+        return createargumentAdapter();
+      }
+      @Override
+      public Adapter caseElementModification(ElementModification object)
+      {
+        return createElementModificationAdapter();
+      }
+      @Override
+      public Adapter caseElementRedeclaration(ElementRedeclaration object)
+      {
+        return createElementRedeclarationAdapter();
+      }
+      @Override
+      public Adapter caseElementReplaceableClause(ElementReplaceableClause object)
+      {
+        return createElementReplaceableClauseAdapter();
+      }
+      @Override
+      public Adapter caseElementComponentClause(ElementComponentClause object)
+      {
+        return createElementComponentClauseAdapter();
+      }
+      @Override
+      public Adapter caseEquationClause(EquationClause object)
+      {
+        return createEquationClauseAdapter();
+      }
+      @Override
+      public Adapter casealgorithm_clause(algorithm_clause object)
+      {
+        return createalgorithm_clauseAdapter();
+      }
+      @Override
+      public Adapter caseinitial_equation_rule_clause(initial_equation_rule_clause object)
+      {
+        return createinitial_equation_rule_clauseAdapter();
+      }
+      @Override
+      public Adapter caseinitial_algorithm_clause(initial_algorithm_clause object)
+      {
+        return createinitial_algorithm_clauseAdapter();
+      }
+      @Override
+      public Adapter caseequation_rule(equation_rule object)
+      {
+        return createequation_ruleAdapter();
+      }
+      @Override
+      public Adapter casealgorithm(algorithm object)
+      {
+        return createalgorithmAdapter();
+      }
+      @Override
+      public Adapter caseConditionalEquationRule(ConditionalEquationRule object)
+      {
+        return createConditionalEquationRuleAdapter();
+      }
+      @Override
+      public Adapter caseConditionAlgorithmRule(ConditionAlgorithmRule object)
+      {
+        return createConditionAlgorithmRuleAdapter();
+      }
+      @Override
+      public Adapter caseForEquationClause(ForEquationClause object)
+      {
+        return createForEquationClauseAdapter();
+      }
+      @Override
+      public Adapter caseForAlgorithmClause(ForAlgorithmClause object)
+      {
+        return createForAlgorithmClauseAdapter();
+      }
+      @Override
+      public Adapter caseWhileClause(WhileClause object)
+      {
+        return createWhileClauseAdapter();
+      }
+      @Override
+      public Adapter casewhen_clause_e(when_clause_e object)
+      {
+        return createwhen_clause_eAdapter();
+      }
+      @Override
+      public Adapter caseelse_when_e(else_when_e object)
+      {
+        return createelse_when_eAdapter();
+      }
+      @Override
+      public Adapter casewhen_clause_a(when_clause_a object)
+      {
+        return createwhen_clause_aAdapter();
+      }
+      @Override
+      public Adapter caseelse_when_a(else_when_a object)
+      {
+        return createelse_when_aAdapter();
+      }
+      @Override
+      public Adapter caseequation_rule_elseif(equation_rule_elseif object)
+      {
+        return createequation_rule_elseifAdapter();
+      }
+      @Override
+      public Adapter casealgorithm_elseif(algorithm_elseif object)
+      {
+        return createalgorithm_elseifAdapter();
+      }
+      @Override
+      public Adapter caseComment(Comment object)
+      {
+        return createCommentAdapter();
+      }
+      @Override
+      public Adapter caseAnnotation(Annotation object)
+      {
+        return createAnnotationAdapter();
+      }
+      @Override
+      public Adapter casePublicElementList(PublicElementList object)
+      {
+        return createPublicElementListAdapter();
+      }
+      @Override
+      public Adapter caseProtectesElementList(ProtectesElementList object)
+      {
+        return createProtectesElementListAdapter();
+      }
+      @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.modelica.xtext.modelicaBase.StorageUnit <em>Storage Unit</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.modelica.xtext.modelicaBase.StorageUnit
+   * @generated
+   */
+  public Adapter createStorageUnitAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.EntityDefinition <em>Entity 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.modelica.xtext.modelicaBase.EntityDefinition
+   * @generated
+   */
+  public Adapter createEntityDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ClassDefinition <em>Class 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.modelica.xtext.modelicaBase.ClassDefinition
+   * @generated
+   */
+  public Adapter createClassDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.PartialDerivative <em>Partial Derivative</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.modelica.xtext.modelicaBase.PartialDerivative
+   * @generated
+   */
+  public Adapter createPartialDerivativeAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ClassModification <em>Class Modification</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.modelica.xtext.modelicaBase.ClassModification
+   * @generated
+   */
+  public Adapter createClassModificationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ClassOverloading <em>Class Overloading</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.modelica.xtext.modelicaBase.ClassOverloading
+   * @generated
+   */
+  public Adapter createClassOverloadingAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.Enumeration <em>Enumeration</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.modelica.xtext.modelicaBase.Enumeration
+   * @generated
+   */
+  public Adapter createEnumerationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ExternalClause <em>External Clause</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.modelica.xtext.modelicaBase.ExternalClause
+   * @generated
+   */
+  public Adapter createExternalClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ElementList <em>Element List</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.modelica.xtext.modelicaBase.ElementList
+   * @generated
+   */
+  public Adapter createElementListAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ClassElement <em>Class Element</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.modelica.xtext.modelicaBase.ClassElement
+   * @generated
+   */
+  public Adapter createClassElementAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ReplaceableElementClause <em>Replaceable Element Clause</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.modelica.xtext.modelicaBase.ReplaceableElementClause
+   * @generated
+   */
+  public Adapter createReplaceableElementClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ImportClause <em>Import Clause</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.modelica.xtext.modelicaBase.ImportClause
+   * @generated
+   */
+  public Adapter createImportClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ExtendsClause <em>Extends Clause</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.modelica.xtext.modelicaBase.ExtendsClause
+   * @generated
+   */
+  public Adapter createExtendsClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ConstrainingClause <em>Constraining Clause</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.modelica.xtext.modelicaBase.ConstrainingClause
+   * @generated
+   */
+  public Adapter createConstrainingClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ComponentClause <em>Component Clause</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.modelica.xtext.modelicaBase.ComponentClause
+   * @generated
+   */
+  public Adapter createComponentClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.TypeSpecifier <em>Type Specifier</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.modelica.xtext.modelicaBase.TypeSpecifier
+   * @generated
+   */
+  public Adapter createTypeSpecifierAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ComponentDeclaration <em>Component Declaration</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.modelica.xtext.modelicaBase.ComponentDeclaration
+   * @generated
+   */
+  public Adapter createComponentDeclarationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.Modification <em>Modification</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.modelica.xtext.modelicaBase.Modification
+   * @generated
+   */
+  public Adapter createModificationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.SimpleModification <em>Simple Modification</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.modelica.xtext.modelicaBase.SimpleModification
+   * @generated
+   */
+  public Adapter createSimpleModificationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.argument <em>argument</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.modelica.xtext.modelicaBase.argument
+   * @generated
+   */
+  public Adapter createargumentAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ElementModification <em>Element Modification</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.modelica.xtext.modelicaBase.ElementModification
+   * @generated
+   */
+  public Adapter createElementModificationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ElementRedeclaration <em>Element Redeclaration</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.modelica.xtext.modelicaBase.ElementRedeclaration
+   * @generated
+   */
+  public Adapter createElementRedeclarationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ElementReplaceableClause <em>Element Replaceable Clause</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.modelica.xtext.modelicaBase.ElementReplaceableClause
+   * @generated
+   */
+  public Adapter createElementReplaceableClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ElementComponentClause <em>Element Component Clause</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.modelica.xtext.modelicaBase.ElementComponentClause
+   * @generated
+   */
+  public Adapter createElementComponentClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.EquationClause <em>Equation Clause</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.modelica.xtext.modelicaBase.EquationClause
+   * @generated
+   */
+  public Adapter createEquationClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.algorithm_clause <em>algorithm clause</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.modelica.xtext.modelicaBase.algorithm_clause
+   * @generated
+   */
+  public Adapter createalgorithm_clauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.initial_equation_rule_clause <em>initial equation rule clause</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.modelica.xtext.modelicaBase.initial_equation_rule_clause
+   * @generated
+   */
+  public Adapter createinitial_equation_rule_clauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.initial_algorithm_clause <em>initial algorithm clause</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.modelica.xtext.modelicaBase.initial_algorithm_clause
+   * @generated
+   */
+  public Adapter createinitial_algorithm_clauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.equation_rule <em>equation rule</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.modelica.xtext.modelicaBase.equation_rule
+   * @generated
+   */
+  public Adapter createequation_ruleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.algorithm <em>algorithm</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.modelica.xtext.modelicaBase.algorithm
+   * @generated
+   */
+  public Adapter createalgorithmAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ConditionalEquationRule <em>Conditional Equation Rule</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.modelica.xtext.modelicaBase.ConditionalEquationRule
+   * @generated
+   */
+  public Adapter createConditionalEquationRuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ConditionAlgorithmRule <em>Condition Algorithm Rule</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.modelica.xtext.modelicaBase.ConditionAlgorithmRule
+   * @generated
+   */
+  public Adapter createConditionAlgorithmRuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ForEquationClause <em>For Equation Clause</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.modelica.xtext.modelicaBase.ForEquationClause
+   * @generated
+   */
+  public Adapter createForEquationClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ForAlgorithmClause <em>For Algorithm Clause</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.modelica.xtext.modelicaBase.ForAlgorithmClause
+   * @generated
+   */
+  public Adapter createForAlgorithmClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.WhileClause <em>While Clause</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.modelica.xtext.modelicaBase.WhileClause
+   * @generated
+   */
+  public Adapter createWhileClauseAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.when_clause_e <em>when clause e</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.modelica.xtext.modelicaBase.when_clause_e
+   * @generated
+   */
+  public Adapter createwhen_clause_eAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.else_when_e <em>else when e</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.modelica.xtext.modelicaBase.else_when_e
+   * @generated
+   */
+  public Adapter createelse_when_eAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.when_clause_a <em>when clause a</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.modelica.xtext.modelicaBase.when_clause_a
+   * @generated
+   */
+  public Adapter createwhen_clause_aAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.else_when_a <em>else when a</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.modelica.xtext.modelicaBase.else_when_a
+   * @generated
+   */
+  public Adapter createelse_when_aAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.equation_rule_elseif <em>equation rule elseif</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.modelica.xtext.modelicaBase.equation_rule_elseif
+   * @generated
+   */
+  public Adapter createequation_rule_elseifAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.algorithm_elseif <em>algorithm elseif</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.modelica.xtext.modelicaBase.algorithm_elseif
+   * @generated
+   */
+  public Adapter createalgorithm_elseifAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.Comment <em>Comment</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.modelica.xtext.modelicaBase.Comment
+   * @generated
+   */
+  public Adapter createCommentAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.Annotation <em>Annotation</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.modelica.xtext.modelicaBase.Annotation
+   * @generated
+   */
+  public Adapter createAnnotationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.PublicElementList <em>Public Element List</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.modelica.xtext.modelicaBase.PublicElementList
+   * @generated
+   */
+  public Adapter createPublicElementListAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.modelica.xtext.modelicaBase.ProtectesElementList <em>Protectes Element List</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.modelica.xtext.modelicaBase.ProtectesElementList
+   * @generated
+   */
+  public Adapter createProtectesElementListAdapter()
+  {
+    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;
+  }
+
+} //ModelicaBaseAdapterFactory
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/util/ModelicaBaseSwitch.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/util/ModelicaBaseSwitch.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/util/ModelicaBaseSwitch.java	(revision 540)
@@ -0,0 +1,1185 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase.util;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.modelica.xtext.modelicaBase.*;
+
+/**
+ * <!-- 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.modelica.xtext.modelicaBase.ModelicaBasePackage
+ * @generated
+ */
+public class ModelicaBaseSwitch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static ModelicaBasePackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ModelicaBaseSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = ModelicaBasePackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * 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
+   */
+  public T doSwitch(EObject theEObject)
+  {
+    return doSwitch(theEObject.eClass(), theEObject);
+  }
+
+  /**
+   * 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
+   */
+  protected T doSwitch(EClass theEClass, EObject theEObject)
+  {
+    if (theEClass.eContainer() == modelPackage)
+    {
+      return doSwitch(theEClass.getClassifierID(), theEObject);
+    }
+    else
+    {
+      List<EClass> eSuperTypes = theEClass.getESuperTypes();
+      return
+        eSuperTypes.isEmpty() ?
+          defaultCase(theEObject) :
+          doSwitch(eSuperTypes.get(0), theEObject);
+    }
+  }
+
+  /**
+   * 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
+   */
+  protected T doSwitch(int classifierID, EObject theEObject)
+  {
+    switch (classifierID)
+    {
+      case ModelicaBasePackage.STORAGE_UNIT:
+      {
+        StorageUnit storageUnit = (StorageUnit)theEObject;
+        T result = caseStorageUnit(storageUnit);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ENTITY_DEFINITION:
+      {
+        EntityDefinition entityDefinition = (EntityDefinition)theEObject;
+        T result = caseEntityDefinition(entityDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CLASS_DEFINITION:
+      {
+        ClassDefinition classDefinition = (ClassDefinition)theEObject;
+        T result = caseClassDefinition(classDefinition);
+        if (result == null) result = caseEntityDefinition(classDefinition);
+        if (result == null) result = caseClassElement(classDefinition);
+        if (result == null) result = caseElementRedeclaration(classDefinition);
+        if (result == null) result = caseargument(classDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.PARTIAL_DERIVATIVE:
+      {
+        PartialDerivative partialDerivative = (PartialDerivative)theEObject;
+        T result = casePartialDerivative(partialDerivative);
+        if (result == null) result = caseEntityDefinition(partialDerivative);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CLASS_MODIFICATION:
+      {
+        ClassModification classModification = (ClassModification)theEObject;
+        T result = caseClassModification(classModification);
+        if (result == null) result = caseEntityDefinition(classModification);
+        if (result == null) result = caseModification(classModification);
+        if (result == null) result = caseAnnotation(classModification);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CLASS_OVERLOADING:
+      {
+        ClassOverloading classOverloading = (ClassOverloading)theEObject;
+        T result = caseClassOverloading(classOverloading);
+        if (result == null) result = caseEntityDefinition(classOverloading);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ENUMERATION:
+      {
+        Enumeration enumeration = (Enumeration)theEObject;
+        T result = caseEnumeration(enumeration);
+        if (result == null) result = caseEntityDefinition(enumeration);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.EXTERNAL_CLAUSE:
+      {
+        ExternalClause externalClause = (ExternalClause)theEObject;
+        T result = caseExternalClause(externalClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELEMENT_LIST:
+      {
+        ElementList elementList = (ElementList)theEObject;
+        T result = caseElementList(elementList);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CLASS_ELEMENT:
+      {
+        ClassElement classElement = (ClassElement)theEObject;
+        T result = caseClassElement(classElement);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.REPLACEABLE_ELEMENT_CLAUSE:
+      {
+        ReplaceableElementClause replaceableElementClause = (ReplaceableElementClause)theEObject;
+        T result = caseReplaceableElementClause(replaceableElementClause);
+        if (result == null) result = caseClassElement(replaceableElementClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.IMPORT_CLAUSE:
+      {
+        ImportClause importClause = (ImportClause)theEObject;
+        T result = caseImportClause(importClause);
+        if (result == null) result = caseClassElement(importClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.EXTENDS_CLAUSE:
+      {
+        ExtendsClause extendsClause = (ExtendsClause)theEObject;
+        T result = caseExtendsClause(extendsClause);
+        if (result == null) result = caseClassElement(extendsClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CONSTRAINING_CLAUSE:
+      {
+        ConstrainingClause constrainingClause = (ConstrainingClause)theEObject;
+        T result = caseConstrainingClause(constrainingClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.COMPONENT_CLAUSE:
+      {
+        ComponentClause componentClause = (ComponentClause)theEObject;
+        T result = caseComponentClause(componentClause);
+        if (result == null) result = caseClassElement(componentClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.TYPE_SPECIFIER:
+      {
+        TypeSpecifier typeSpecifier = (TypeSpecifier)theEObject;
+        T result = caseTypeSpecifier(typeSpecifier);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.COMPONENT_DECLARATION:
+      {
+        ComponentDeclaration componentDeclaration = (ComponentDeclaration)theEObject;
+        T result = caseComponentDeclaration(componentDeclaration);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.MODIFICATION:
+      {
+        Modification modification = (Modification)theEObject;
+        T result = caseModification(modification);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.SIMPLE_MODIFICATION:
+      {
+        SimpleModification simpleModification = (SimpleModification)theEObject;
+        T result = caseSimpleModification(simpleModification);
+        if (result == null) result = caseModification(simpleModification);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ARGUMENT:
+      {
+        argument argument = (argument)theEObject;
+        T result = caseargument(argument);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELEMENT_MODIFICATION:
+      {
+        ElementModification elementModification = (ElementModification)theEObject;
+        T result = caseElementModification(elementModification);
+        if (result == null) result = caseargument(elementModification);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELEMENT_REDECLARATION:
+      {
+        ElementRedeclaration elementRedeclaration = (ElementRedeclaration)theEObject;
+        T result = caseElementRedeclaration(elementRedeclaration);
+        if (result == null) result = caseargument(elementRedeclaration);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELEMENT_REPLACEABLE_CLAUSE:
+      {
+        ElementReplaceableClause elementReplaceableClause = (ElementReplaceableClause)theEObject;
+        T result = caseElementReplaceableClause(elementReplaceableClause);
+        if (result == null) result = caseElementRedeclaration(elementReplaceableClause);
+        if (result == null) result = caseargument(elementReplaceableClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELEMENT_COMPONENT_CLAUSE:
+      {
+        ElementComponentClause elementComponentClause = (ElementComponentClause)theEObject;
+        T result = caseElementComponentClause(elementComponentClause);
+        if (result == null) result = caseElementRedeclaration(elementComponentClause);
+        if (result == null) result = caseargument(elementComponentClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.EQUATION_CLAUSE:
+      {
+        EquationClause equationClause = (EquationClause)theEObject;
+        T result = caseEquationClause(equationClause);
+        if (result == null) result = caseinitial_equation_rule_clause(equationClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ALGORITHM_CLAUSE:
+      {
+        algorithm_clause algorithm_clause = (algorithm_clause)theEObject;
+        T result = casealgorithm_clause(algorithm_clause);
+        if (result == null) result = caseinitial_algorithm_clause(algorithm_clause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.INITIAL_EQUATION_RULE_CLAUSE:
+      {
+        initial_equation_rule_clause initial_equation_rule_clause = (initial_equation_rule_clause)theEObject;
+        T result = caseinitial_equation_rule_clause(initial_equation_rule_clause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.INITIAL_ALGORITHM_CLAUSE:
+      {
+        initial_algorithm_clause initial_algorithm_clause = (initial_algorithm_clause)theEObject;
+        T result = caseinitial_algorithm_clause(initial_algorithm_clause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.EQUATION_RULE:
+      {
+        equation_rule equation_rule = (equation_rule)theEObject;
+        T result = caseequation_rule(equation_rule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ALGORITHM:
+      {
+        algorithm algorithm = (algorithm)theEObject;
+        T result = casealgorithm(algorithm);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CONDITIONAL_EQUATION_RULE:
+      {
+        ConditionalEquationRule conditionalEquationRule = (ConditionalEquationRule)theEObject;
+        T result = caseConditionalEquationRule(conditionalEquationRule);
+        if (result == null) result = caseequation_rule(conditionalEquationRule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.CONDITION_ALGORITHM_RULE:
+      {
+        ConditionAlgorithmRule conditionAlgorithmRule = (ConditionAlgorithmRule)theEObject;
+        T result = caseConditionAlgorithmRule(conditionAlgorithmRule);
+        if (result == null) result = casealgorithm(conditionAlgorithmRule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.FOR_EQUATION_CLAUSE:
+      {
+        ForEquationClause forEquationClause = (ForEquationClause)theEObject;
+        T result = caseForEquationClause(forEquationClause);
+        if (result == null) result = caseequation_rule(forEquationClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.FOR_ALGORITHM_CLAUSE:
+      {
+        ForAlgorithmClause forAlgorithmClause = (ForAlgorithmClause)theEObject;
+        T result = caseForAlgorithmClause(forAlgorithmClause);
+        if (result == null) result = casealgorithm(forAlgorithmClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.WHILE_CLAUSE:
+      {
+        WhileClause whileClause = (WhileClause)theEObject;
+        T result = caseWhileClause(whileClause);
+        if (result == null) result = casealgorithm(whileClause);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.WHEN_CLAUSE_E:
+      {
+        when_clause_e when_clause_e = (when_clause_e)theEObject;
+        T result = casewhen_clause_e(when_clause_e);
+        if (result == null) result = caseequation_rule(when_clause_e);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELSE_WHEN_E:
+      {
+        else_when_e else_when_e = (else_when_e)theEObject;
+        T result = caseelse_when_e(else_when_e);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.WHEN_CLAUSE_A:
+      {
+        when_clause_a when_clause_a = (when_clause_a)theEObject;
+        T result = casewhen_clause_a(when_clause_a);
+        if (result == null) result = casealgorithm(when_clause_a);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ELSE_WHEN_A:
+      {
+        else_when_a else_when_a = (else_when_a)theEObject;
+        T result = caseelse_when_a(else_when_a);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.EQUATION_RULE_ELSEIF:
+      {
+        equation_rule_elseif equation_rule_elseif = (equation_rule_elseif)theEObject;
+        T result = caseequation_rule_elseif(equation_rule_elseif);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ALGORITHM_ELSEIF:
+      {
+        algorithm_elseif algorithm_elseif = (algorithm_elseif)theEObject;
+        T result = casealgorithm_elseif(algorithm_elseif);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.COMMENT:
+      {
+        Comment comment = (Comment)theEObject;
+        T result = caseComment(comment);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.ANNOTATION:
+      {
+        Annotation annotation = (Annotation)theEObject;
+        T result = caseAnnotation(annotation);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.PUBLIC_ELEMENT_LIST:
+      {
+        PublicElementList publicElementList = (PublicElementList)theEObject;
+        T result = casePublicElementList(publicElementList);
+        if (result == null) result = caseElementList(publicElementList);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case ModelicaBasePackage.PROTECTES_ELEMENT_LIST:
+      {
+        ProtectesElementList protectesElementList = (ProtectesElementList)theEObject;
+        T result = caseProtectesElementList(protectesElementList);
+        if (result == null) result = caseElementList(protectesElementList);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      default: return defaultCase(theEObject);
+    }
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Storage Unit</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>Storage Unit</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseStorageUnit(StorageUnit object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Entity 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>Entity Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseEntityDefinition(EntityDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Class 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>Class Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseClassDefinition(ClassDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Partial Derivative</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>Partial Derivative</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casePartialDerivative(PartialDerivative object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Class Modification</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>Class Modification</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseClassModification(ClassModification object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Class Overloading</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>Class Overloading</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseClassOverloading(ClassOverloading object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Enumeration</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>Enumeration</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseEnumeration(Enumeration object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>External Clause</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>External Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseExternalClause(ExternalClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Element List</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>Element List</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseElementList(ElementList object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Class Element</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>Class Element</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseClassElement(ClassElement object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Replaceable Element Clause</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>Replaceable Element Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseReplaceableElementClause(ReplaceableElementClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Import Clause</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>Import Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseImportClause(ImportClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Extends Clause</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>Extends Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseExtendsClause(ExtendsClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Constraining Clause</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>Constraining Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseConstrainingClause(ConstrainingClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Component Clause</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>Component Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseComponentClause(ComponentClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Type Specifier</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>Type Specifier</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseTypeSpecifier(TypeSpecifier object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Component Declaration</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>Component Declaration</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseComponentDeclaration(ComponentDeclaration object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Modification</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>Modification</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseModification(Modification object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Simple Modification</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>Simple Modification</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseSimpleModification(SimpleModification object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>argument</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>argument</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseargument(argument object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Element Modification</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>Element Modification</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseElementModification(ElementModification object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Element Redeclaration</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>Element Redeclaration</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseElementRedeclaration(ElementRedeclaration object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Element Replaceable Clause</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>Element Replaceable Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseElementReplaceableClause(ElementReplaceableClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Element Component Clause</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>Element Component Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseElementComponentClause(ElementComponentClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Equation Clause</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>Equation Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseEquationClause(EquationClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>algorithm clause</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>algorithm clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casealgorithm_clause(algorithm_clause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>initial equation rule clause</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>initial equation rule clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseinitial_equation_rule_clause(initial_equation_rule_clause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>initial algorithm clause</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>initial algorithm clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseinitial_algorithm_clause(initial_algorithm_clause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>equation rule</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>equation rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseequation_rule(equation_rule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>algorithm</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>algorithm</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casealgorithm(algorithm object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Conditional Equation Rule</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>Conditional Equation Rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseConditionalEquationRule(ConditionalEquationRule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Condition Algorithm Rule</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>Condition Algorithm Rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseConditionAlgorithmRule(ConditionAlgorithmRule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>For Equation Clause</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>For Equation Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseForEquationClause(ForEquationClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>For Algorithm Clause</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>For Algorithm Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseForAlgorithmClause(ForAlgorithmClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>While Clause</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>While Clause</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseWhileClause(WhileClause object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>when clause e</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>when clause e</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casewhen_clause_e(when_clause_e object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>else when e</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>else when e</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseelse_when_e(else_when_e object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>when clause a</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>when clause a</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casewhen_clause_a(when_clause_a object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>else when a</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>else when a</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseelse_when_a(else_when_a object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>equation rule elseif</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>equation rule elseif</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseequation_rule_elseif(equation_rule_elseif object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>algorithm elseif</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>algorithm elseif</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casealgorithm_elseif(algorithm_elseif object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Comment</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>Comment</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseComment(Comment object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Annotation</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>Annotation</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseAnnotation(Annotation object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Public Element List</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>Public Element List</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T casePublicElementList(PublicElementList object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Protectes Element List</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>Protectes Element List</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseProtectesElementList(ProtectesElementList 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
+   */
+  public T defaultCase(EObject object)
+  {
+    return null;
+  }
+
+} //ModelicaBaseSwitch
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/when_clause_a.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/when_clause_a.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/when_clause_a.java	(revision 540)
@@ -0,0 +1,88 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>when clause a</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.when_clause_a#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.when_clause_a#getThenAlgorithmClauses <em>Then Algorithm Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.when_clause_a#getElseWhenClauses <em>Else When Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_a()
+ * @model
+ * @generated
+ */
+public interface when_clause_a extends algorithm
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_a_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.when_clause_a#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Algorithm Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Algorithm Clauses</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>Then Algorithm Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_a_ThenAlgorithmClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenAlgorithmClauses();
+
+  /**
+   * Returns the value of the '<em><b>Else When Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.else_when_a}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Else When Clauses</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>Else When Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_a_ElseWhenClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<else_when_a> getElseWhenClauses();
+
+} // when_clause_a
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/when_clause_e.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/when_clause_e.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/modelicaBase/when_clause_e.java	(revision 540)
@@ -0,0 +1,88 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ */
+package org.modelica.xtext.modelicaBase;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>when clause e</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.modelica.xtext.modelicaBase.when_clause_e#getCondition <em>Condition</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.when_clause_e#getThenEquationClauses <em>Then Equation Clauses</em>}</li>
+ *   <li>{@link org.modelica.xtext.modelicaBase.when_clause_e#getElseWhenClauses <em>Else When Clauses</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_e()
+ * @model
+ * @generated
+ */
+public interface when_clause_e extends equation_rule
+{
+  /**
+   * Returns the value of the '<em><b>Condition</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Condition</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Condition</em>' attribute.
+   * @see #setCondition(String)
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_e_Condition()
+   * @model
+   * @generated
+   */
+  String getCondition();
+
+  /**
+   * Sets the value of the '{@link org.modelica.xtext.modelicaBase.when_clause_e#getCondition <em>Condition</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Condition</em>' attribute.
+   * @see #getCondition()
+   * @generated
+   */
+  void setCondition(String value);
+
+  /**
+   * Returns the value of the '<em><b>Then Equation Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.equation_rule}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Then Equation Clauses</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>Then Equation Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_e_ThenEquationClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<equation_rule> getThenEquationClauses();
+
+  /**
+   * Returns the value of the '<em><b>Else When Clauses</b></em>' containment reference list.
+   * The list contents are of type {@link org.modelica.xtext.modelicaBase.else_when_e}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Else When Clauses</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>Else When Clauses</em>' containment reference list.
+   * @see org.modelica.xtext.modelicaBase.ModelicaBasePackage#getwhen_clause_e_ElseWhenClauses()
+   * @model containment="true"
+   * @generated
+   */
+  EList<else_when_e> getElseWhenClauses();
+
+} // when_clause_e
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parseTreeConstruction/ModelicaBaseParsetreeConstructor.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parseTreeConstruction/ModelicaBaseParsetreeConstructor.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parseTreeConstruction/ModelicaBaseParsetreeConstructor.java	(revision 540)
@@ -0,0 +1,11127 @@
+/*
+* generated by Xtext
+*/
+package org.modelica.xtext.parseTreeConstruction;
+
+import org.eclipse.emf.ecore.*;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parsetree.reconstr.IInstanceDescription;
+import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;
+
+import org.modelica.xtext.services.ModelicaBaseGrammarAccess;
+
+import com.google.inject.Inject;
+
+public class ModelicaBaseParsetreeConstructor extends AbstractParseTreeConstructor {
+		
+	@Inject
+	private ModelicaBaseGrammarAccess grammarAccess;
+		
+	public ModelicaBaseGrammarAccess getGrammarAccess() {
+		return grammarAccess;
+	}
+
+	protected AbstractToken getRootToken(IInstanceDescription inst) {
+		return new ThisRootNode(inst);	
+	}
+	
+protected class ThisRootNode extends RootToken {
+	public ThisRootNode(IInstanceDescription inst) {
+		super(inst);
+	}
+	
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_Group(this, this, 0, inst);
+			case 1: return new EntityDefinition_Alternatives(this, this, 1, inst);
+			case 2: return new ClassDefinition_Group(this, this, 2, inst);
+			case 3: return new PartialDerivative_Group(this, this, 3, inst);
+			case 4: return new ClassModification_Group(this, this, 4, inst);
+			case 5: return new ClassOverloading_Group(this, this, 5, inst);
+			case 6: return new Enumeration_Group(this, this, 6, inst);
+			case 7: return new External_clause_Group(this, this, 7, inst);
+			case 8: return new ElementList_Group(this, this, 8, inst);
+			case 9: return new ElementList2_Alternatives(this, this, 9, inst);
+			case 10: return new ClassElement_Alternatives(this, this, 10, inst);
+			case 11: return new ReplaceableElementClause_Group(this, this, 11, inst);
+			case 12: return new Import_clause_Group(this, this, 12, inst);
+			case 13: return new Extends_clause_Group(this, this, 13, inst);
+			case 14: return new Constraining_clause_Group(this, this, 14, inst);
+			case 15: return new Component_clause_Group(this, this, 15, inst);
+			case 16: return new Type_specifier_Group(this, this, 16, inst);
+			case 17: return new Component_declaration_Group(this, this, 17, inst);
+			case 18: return new Modification_Alternatives(this, this, 18, inst);
+			case 19: return new SimpleModification_Alternatives(this, this, 19, inst);
+			case 20: return new Class_modification_Group(this, this, 20, inst);
+			case 21: return new Argument_Alternatives(this, this, 21, inst);
+			case 22: return new ElementModification_Group(this, this, 22, inst);
+			case 23: return new ElementRedeclaration_Group(this, this, 23, inst);
+			case 24: return new ElementReplaceableClause_Group(this, this, 24, inst);
+			case 25: return new ElementComponentClause_Group(this, this, 25, inst);
+			case 26: return new Equation_rule_clause_Group(this, this, 26, inst);
+			case 27: return new Algorithm_clause_Group(this, this, 27, inst);
+			case 28: return new Initial_equation_rule_clause_Group(this, this, 28, inst);
+			case 29: return new Initial_algorithm_clause_Group(this, this, 29, inst);
+			case 30: return new Equation_rule_Group(this, this, 30, inst);
+			case 31: return new Algorithm_Group(this, this, 31, inst);
+			case 32: return new Conditional_equation_rule_e_Group(this, this, 32, inst);
+			case 33: return new Conditional_equation_rule_a_Group(this, this, 33, inst);
+			case 34: return new For_clause_e_Group(this, this, 34, inst);
+			case 35: return new For_clause_a_Group(this, this, 35, inst);
+			case 36: return new While_clause_Group(this, this, 36, inst);
+			case 37: return new When_clause_e_Group(this, this, 37, inst);
+			case 38: return new Else_when_e_Group(this, this, 38, inst);
+			case 39: return new When_clause_a_Group(this, this, 39, inst);
+			case 40: return new Else_when_a_Group(this, this, 40, inst);
+			case 41: return new Equation_rule_elseif_Group(this, this, 41, inst);
+			case 42: return new Algorithm_elseif_Group(this, this, 42, inst);
+			case 43: return new Comment_Group(this, this, 43, inst);
+			case 44: return new Annotation_Group(this, this, 44, inst);
+			default: return null;
+		}	
+	}	
+}
+	
+
+/************ begin Rule StorageUnit ****************
+ *
+ * StorageUnit:
+ *   ("within" name_path? SEMICOLON)? ("final"? classDefinition+=ClassDefinition ";")*; 
+ * 
+ * / *
+ *  * Copyright (c) 2009 - currentYear, Adrian Pop [adrpo@ida.liu.se] 
+ *  * All rights reserved.
+ *  * /
+ * 
+ *   
+ * 
+ * 
+ * / *------------------------------------------------------------------
+ *  * PARSER RULES
+ *  *------------------------------------------------------------------* /
+ *
+ **/
+
+// ("within" name_path? SEMICOLON)? ("final"? classDefinition+=ClassDefinition ";")*
+protected class StorageUnit_Group extends GroupToken {
+	
+	public StorageUnit_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_Group_1(parent, this, 0, inst);
+			case 1: return new StorageUnit_Group_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getStorageUnitRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// ("within" name_path? SEMICOLON)?
+protected class StorageUnit_Group_0 extends GroupToken {
+	
+	public StorageUnit_Group_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getGroup_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_SEMICOLONTerminalRuleCall_0_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "within"
+protected class StorageUnit_WithinKeyword_0_0 extends KeywordToken  {
+	
+	public StorageUnit_WithinKeyword_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getWithinKeyword_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// name_path?
+protected class StorageUnit_Name_pathParserRuleCall_0_1 extends UnassignedTextToken {
+
+	public StorageUnit_Name_pathParserRuleCall_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getName_pathParserRuleCall_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_WithinKeyword_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// SEMICOLON
+protected class StorageUnit_SEMICOLONTerminalRuleCall_0_2 extends UnassignedTextToken {
+
+	public StorageUnit_SEMICOLONTerminalRuleCall_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getSEMICOLONTerminalRuleCall_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_Name_pathParserRuleCall_0_1(parent, this, 0, inst);
+			case 1: return new StorageUnit_WithinKeyword_0_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// ("final"? classDefinition+=ClassDefinition ";")*
+protected class StorageUnit_Group_1 extends GroupToken {
+	
+	public StorageUnit_Group_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getGroup_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_SemicolonKeyword_1_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// classDefinition+=ClassDefinition
+protected class StorageUnit_ClassDefinitionAssignment_1_1 extends AssignmentToken  {
+	
+	public StorageUnit_ClassDefinitionAssignment_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getClassDefinitionAssignment_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("classDefinition",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("classDefinition");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getStorageUnitAccess().getClassDefinitionClassDefinitionParserRuleCall_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new StorageUnit_Group_1(parent, next, actIndex, consumed);
+			case 1: return new StorageUnit_Group_0(parent, next, actIndex, consumed);
+			default: return parent.createParentFollower(next, actIndex , index - 2, consumed);
+		}	
+	}	
+}
+
+// ";"
+protected class StorageUnit_SemicolonKeyword_1_2 extends KeywordToken  {
+	
+	public StorageUnit_SemicolonKeyword_1_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getStorageUnitAccess().getSemicolonKeyword_1_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new StorageUnit_ClassDefinitionAssignment_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule StorageUnit ****************/
+
+
+/************ begin Rule EntityDefinition ****************
+ *
+ * EntityDefinition:
+ *   ClassDefinition|PartialDerivative|ClassModification|ClassOverloading|Enumeration
+ * ;
+ *
+ **/
+
+// ClassDefinition|PartialDerivative|ClassModification|ClassOverloading|Enumeration
+protected class EntityDefinition_Alternatives extends AlternativesToken {
+
+	public EntityDefinition_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getEntityDefinitionAccess().getAlternatives();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new EntityDefinition_ClassDefinitionParserRuleCall_0(parent, this, 0, inst);
+			case 1: return new EntityDefinition_PartialDerivativeParserRuleCall_1(parent, this, 1, inst);
+			case 2: return new EntityDefinition_ClassModificationParserRuleCall_2(parent, this, 2, inst);
+			case 3: return new EntityDefinition_ClassOverloadingParserRuleCall_3(parent, this, 3, inst);
+			case 4: return new EntityDefinition_EnumerationParserRuleCall_4(parent, this, 4, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getEntityDefinitionRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// ClassDefinition
+protected class EntityDefinition_ClassDefinitionParserRuleCall_0 extends RuleCallToken {
+	
+	public EntityDefinition_ClassDefinitionParserRuleCall_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEntityDefinitionAccess().getClassDefinitionParserRuleCall_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ClassDefinition_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// PartialDerivative
+protected class EntityDefinition_PartialDerivativeParserRuleCall_1 extends RuleCallToken {
+	
+	public EntityDefinition_PartialDerivativeParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEntityDefinitionAccess().getPartialDerivativeParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(PartialDerivative_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getPartialDerivativeRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// ClassModification
+protected class EntityDefinition_ClassModificationParserRuleCall_2 extends RuleCallToken {
+	
+	public EntityDefinition_ClassModificationParserRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEntityDefinitionAccess().getClassModificationParserRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassModification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ClassModification_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClassModificationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// ClassOverloading
+protected class EntityDefinition_ClassOverloadingParserRuleCall_3 extends RuleCallToken {
+	
+	public EntityDefinition_ClassOverloadingParserRuleCall_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEntityDefinitionAccess().getClassOverloadingParserRuleCall_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ClassOverloading_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClassOverloadingRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// Enumeration
+protected class EntityDefinition_EnumerationParserRuleCall_4 extends RuleCallToken {
+	
+	public EntityDefinition_EnumerationParserRuleCall_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEntityDefinitionAccess().getEnumerationParserRuleCall_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Enumeration_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getEnumerationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+/************ end Rule EntityDefinition ****************/
+
+
+/************ begin Rule ClassDefinition ****************
+ *
+ * ClassDefinition:
+ *   encapsulated?="encapsulated"? partial?="partial"? expandable?="expandable"?
+ *   classType=ClassType (name=IDENT comment=string_comment?|"extends" IDENT modification
+ *   =class_modification? string_comment?) elemList+=ElementList (elemList+=ElementList2
+ *   |initialEquationClauses+=initial_equation_rule_clause|initialAlgorithmClauses+=
+ *   initial_algorithm_clause|equationClauses+=equation_rule_clause|algorithmClauses
+ *   +=algorithm_clause)* extClause=external_clause? "end" IDENT; 
+ * 
+ * 
+ * 	     
+ * 	 
+ * 	  
+ *             
+ *     
+ * 		 
+ * 		  
+ * 		  
+ * 		  
+ * 		  
+ * 	
+ * 	    
+ *       
+ * 	//| SUBTYPEOF type_specifier
+ *
+ **/
+
+// encapsulated?="encapsulated"? partial?="partial"? expandable?="expandable"?
+// classType=ClassType (name=IDENT comment=string_comment?|"extends" IDENT modification
+// =class_modification? string_comment?) elemList+=ElementList (elemList+=ElementList2
+// |initialEquationClauses+=initial_equation_rule_clause|initialAlgorithmClauses+=
+// initial_algorithm_clause|equationClauses+=equation_rule_clause|algorithmClauses
+// +=algorithm_clause)* extClause=external_clause? "end" IDENT 
+// 	     
+// 	 
+// 	  
+//             
+//     
+// 		 
+// 		  
+// 		  
+// 		  
+// 		  
+// 	
+// 	    
+//       
+// 	//| SUBTYPEOF type_specifier
+protected class ClassDefinition_Group extends GroupToken {
+	
+	public ClassDefinition_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_IDENTTerminalRuleCall_9(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// encapsulated?="encapsulated"?
+protected class ClassDefinition_EncapsulatedAssignment_0 extends AssignmentToken  {
+	
+	public ClassDefinition_EncapsulatedAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getEncapsulatedAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("encapsulated",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("encapsulated");
+		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
+			type = AssignmentType.KW;
+			element = grammarAccess.getClassDefinitionAccess().getEncapsulatedEncapsulatedKeyword_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// partial?="partial"?
+protected class ClassDefinition_PartialAssignment_1 extends AssignmentToken  {
+	
+	public ClassDefinition_PartialAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getPartialAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_EncapsulatedAssignment_0(parent, this, 0, inst);
+			default: return parent.createParentFollower(this, index, index - 1, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("partial",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("partial");
+		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
+			type = AssignmentType.KW;
+			element = grammarAccess.getClassDefinitionAccess().getPartialPartialKeyword_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// expandable?="expandable"?
+protected class ClassDefinition_ExpandableAssignment_2 extends AssignmentToken  {
+	
+	public ClassDefinition_ExpandableAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getExpandableAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_PartialAssignment_1(parent, this, 0, inst);
+			case 1: return new ClassDefinition_EncapsulatedAssignment_0(parent, this, 1, inst);
+			default: return parent.createParentFollower(this, index, index - 2, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("expandable",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("expandable");
+		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
+			type = AssignmentType.KW;
+			element = grammarAccess.getClassDefinitionAccess().getExpandableExpandableKeyword_2_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// classType=ClassType
+protected class ClassDefinition_ClassTypeAssignment_3 extends AssignmentToken  {
+	
+	public ClassDefinition_ClassTypeAssignment_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getClassTypeAssignment_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ExpandableAssignment_2(parent, this, 0, inst);
+			case 1: return new ClassDefinition_PartialAssignment_1(parent, this, 1, inst);
+			case 2: return new ClassDefinition_EncapsulatedAssignment_0(parent, this, 2, inst);
+			default: return parent.createParentFollower(this, index, index - 3, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("classType",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("classType");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.ERC;
+			element = grammarAccess.getClassDefinitionAccess().getClassTypeClassTypeEnumRuleCall_3_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// name=IDENT comment=string_comment?|"extends" IDENT modification=class_modification?
+// string_comment?
+protected class ClassDefinition_Alternatives_4 extends AlternativesToken {
+
+	public ClassDefinition_Alternatives_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getAlternatives_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group_4_0(parent, this, 0, inst);
+			case 1: return new ClassDefinition_Group_4_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// name=IDENT comment=string_comment?
+protected class ClassDefinition_Group_4_0 extends GroupToken {
+	
+	public ClassDefinition_Group_4_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getGroup_4_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_CommentAssignment_4_0_1(parent, this, 0, inst);
+			case 1: return new ClassDefinition_NameAssignment_4_0_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// name=IDENT
+protected class ClassDefinition_NameAssignment_4_0_0 extends AssignmentToken  {
+	
+	public ClassDefinition_NameAssignment_4_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getNameAssignment_4_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ClassTypeAssignment_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getClassDefinitionAccess().getNameIDENTTerminalRuleCall_4_0_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// comment=string_comment?
+protected class ClassDefinition_CommentAssignment_4_0_1 extends AssignmentToken  {
+	
+	public ClassDefinition_CommentAssignment_4_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getCommentAssignment_4_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_NameAssignment_4_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getClassDefinitionAccess().getCommentString_commentParserRuleCall_4_0_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// "extends" IDENT modification=class_modification? string_comment?
+protected class ClassDefinition_Group_4_1 extends GroupToken {
+	
+	public ClassDefinition_Group_4_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getGroup_4_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_String_commentParserRuleCall_4_1_3(parent, this, 0, inst);
+			case 1: return new ClassDefinition_ModificationAssignment_4_1_2(parent, this, 1, inst);
+			case 2: return new ClassDefinition_IDENTTerminalRuleCall_4_1_1(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "extends"
+protected class ClassDefinition_ExtendsKeyword_4_1_0 extends KeywordToken  {
+	
+	public ClassDefinition_ExtendsKeyword_4_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getExtendsKeyword_4_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ClassTypeAssignment_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// IDENT
+protected class ClassDefinition_IDENTTerminalRuleCall_4_1_1 extends UnassignedTextToken {
+
+	public ClassDefinition_IDENTTerminalRuleCall_4_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getIDENTTerminalRuleCall_4_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ExtendsKeyword_4_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// modification=class_modification?
+protected class ClassDefinition_ModificationAssignment_4_1_2 extends AssignmentToken  {
+	
+	public ClassDefinition_ModificationAssignment_4_1_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getModificationAssignment_4_1_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getModificationClass_modificationParserRuleCall_4_1_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_IDENTTerminalRuleCall_4_1_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// string_comment?
+protected class ClassDefinition_String_commentParserRuleCall_4_1_3 extends UnassignedTextToken {
+
+	public ClassDefinition_String_commentParserRuleCall_4_1_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getString_commentParserRuleCall_4_1_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ModificationAssignment_4_1_2(parent, this, 0, inst);
+			case 1: return new ClassDefinition_IDENTTerminalRuleCall_4_1_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+// elemList+=ElementList
+protected class ClassDefinition_ElemListAssignment_5 extends AssignmentToken  {
+	
+	public ClassDefinition_ElemListAssignment_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getElemListAssignment_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elemList",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elemList");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getElementListRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getElemListElementListParserRuleCall_5_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_4(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// (elemList+=ElementList2|initialEquationClauses+=initial_equation_rule_clause|
+// initialAlgorithmClauses+=initial_algorithm_clause|equationClauses+=
+// equation_rule_clause|algorithmClauses+=algorithm_clause)*
+protected class ClassDefinition_Alternatives_6 extends AlternativesToken {
+
+	public ClassDefinition_Alternatives_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getAlternatives_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ElemListAssignment_6_0(parent, this, 0, inst);
+			case 1: return new ClassDefinition_InitialEquationClausesAssignment_6_1(parent, this, 1, inst);
+			case 2: return new ClassDefinition_InitialAlgorithmClausesAssignment_6_2(parent, this, 2, inst);
+			case 3: return new ClassDefinition_EquationClausesAssignment_6_3(parent, this, 3, inst);
+			case 4: return new ClassDefinition_AlgorithmClausesAssignment_6_4(parent, this, 4, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elemList+=ElementList2
+protected class ClassDefinition_ElemListAssignment_6_0 extends AssignmentToken  {
+	
+	public ClassDefinition_ElemListAssignment_6_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getElemListAssignment_6_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elemList",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elemList");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getElementList2Rule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getElemListElementList2ParserRuleCall_6_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_6(parent, next, actIndex, consumed);
+			case 1: return new ClassDefinition_ElemListAssignment_5(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// initialEquationClauses+=initial_equation_rule_clause
+protected class ClassDefinition_InitialEquationClausesAssignment_6_1 extends AssignmentToken  {
+	
+	public ClassDefinition_InitialEquationClausesAssignment_6_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getInitialEquationClausesAssignment_6_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Initial_equation_rule_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("initialEquationClauses",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("initialEquationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInitial_equation_rule_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getInitialEquationClausesInitial_equation_rule_clauseParserRuleCall_6_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_6(parent, next, actIndex, consumed);
+			case 1: return new ClassDefinition_ElemListAssignment_5(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// initialAlgorithmClauses+=initial_algorithm_clause
+protected class ClassDefinition_InitialAlgorithmClausesAssignment_6_2 extends AssignmentToken  {
+	
+	public ClassDefinition_InitialAlgorithmClausesAssignment_6_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getInitialAlgorithmClausesAssignment_6_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Initial_algorithm_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("initialAlgorithmClauses",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("initialAlgorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInitial_algorithm_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getInitialAlgorithmClausesInitial_algorithm_clauseParserRuleCall_6_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_6(parent, next, actIndex, consumed);
+			case 1: return new ClassDefinition_ElemListAssignment_5(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// equationClauses+=equation_rule_clause
+protected class ClassDefinition_EquationClausesAssignment_6_3 extends AssignmentToken  {
+	
+	public ClassDefinition_EquationClausesAssignment_6_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getEquationClausesAssignment_6_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("equationClauses",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("equationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getEquationClausesEquation_rule_clauseParserRuleCall_6_3_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_6(parent, next, actIndex, consumed);
+			case 1: return new ClassDefinition_ElemListAssignment_5(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// algorithmClauses+=algorithm_clause
+protected class ClassDefinition_AlgorithmClausesAssignment_6_4 extends AssignmentToken  {
+	
+	public ClassDefinition_AlgorithmClausesAssignment_6_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getAlgorithmClausesAssignment_6_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("algorithmClauses",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("algorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getAlgorithmClausesAlgorithm_clauseParserRuleCall_6_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_6(parent, next, actIndex, consumed);
+			case 1: return new ClassDefinition_ElemListAssignment_5(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// extClause=external_clause?
+protected class ClassDefinition_ExtClauseAssignment_7 extends AssignmentToken  {
+	
+	public ClassDefinition_ExtClauseAssignment_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getExtClauseAssignment_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("extClause",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("extClause");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getExternal_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassDefinitionAccess().getExtClauseExternal_clauseParserRuleCall_7_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassDefinition_Alternatives_6(parent, next, actIndex, consumed);
+			case 1: return new ClassDefinition_ElemListAssignment_5(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "end"
+protected class ClassDefinition_EndKeyword_8 extends KeywordToken  {
+	
+	public ClassDefinition_EndKeyword_8(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getEndKeyword_8();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_ExtClauseAssignment_7(parent, this, 0, inst);
+			case 1: return new ClassDefinition_Alternatives_6(parent, this, 1, inst);
+			case 2: return new ClassDefinition_ElemListAssignment_5(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// IDENT   
+// 	//| SUBTYPEOF type_specifier
+protected class ClassDefinition_IDENTTerminalRuleCall_9 extends UnassignedTextToken {
+
+	public ClassDefinition_IDENTTerminalRuleCall_9(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassDefinitionAccess().getIDENTTerminalRuleCall_9();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_EndKeyword_8(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule ClassDefinition ****************/
+
+
+/************ begin Rule PartialDerivative ****************
+ *
+ * PartialDerivative:
+ *   "function" name=IDENT EQUALS "der" "(" name_path "," ident_list ")" comment=comment;
+ *
+ **/
+
+// "function" name=IDENT EQUALS "der" "(" name_path "," ident_list ")" comment=comment
+protected class PartialDerivative_Group extends GroupToken {
+	
+	public PartialDerivative_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_CommentAssignment_9(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getPartialDerivativeRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "function"
+protected class PartialDerivative_FunctionKeyword_0 extends KeywordToken  {
+	
+	public PartialDerivative_FunctionKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getFunctionKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// name=IDENT
+protected class PartialDerivative_NameAssignment_1 extends AssignmentToken  {
+	
+	public PartialDerivative_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getNameAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_FunctionKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getPartialDerivativeAccess().getNameIDENTTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// EQUALS
+protected class PartialDerivative_EQUALSTerminalRuleCall_2 extends UnassignedTextToken {
+
+	public PartialDerivative_EQUALSTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getEQUALSTerminalRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_NameAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "der"
+protected class PartialDerivative_DerKeyword_3 extends KeywordToken  {
+	
+	public PartialDerivative_DerKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getDerKeyword_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_EQUALSTerminalRuleCall_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "("
+protected class PartialDerivative_LeftParenthesisKeyword_4 extends KeywordToken  {
+	
+	public PartialDerivative_LeftParenthesisKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getLeftParenthesisKeyword_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_DerKeyword_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// name_path
+protected class PartialDerivative_Name_pathParserRuleCall_5 extends UnassignedTextToken {
+
+	public PartialDerivative_Name_pathParserRuleCall_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getName_pathParserRuleCall_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_LeftParenthesisKeyword_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ","
+protected class PartialDerivative_CommaKeyword_6 extends KeywordToken  {
+	
+	public PartialDerivative_CommaKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getCommaKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_Name_pathParserRuleCall_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ident_list
+protected class PartialDerivative_Ident_listParserRuleCall_7 extends UnassignedTextToken {
+
+	public PartialDerivative_Ident_listParserRuleCall_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getIdent_listParserRuleCall_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_CommaKeyword_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ")"
+protected class PartialDerivative_RightParenthesisKeyword_8 extends KeywordToken  {
+	
+	public PartialDerivative_RightParenthesisKeyword_8(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getRightParenthesisKeyword_8();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new PartialDerivative_Ident_listParserRuleCall_7(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// comment=comment
+protected class PartialDerivative_CommentAssignment_9 extends AssignmentToken  {
+	
+	public PartialDerivative_CommentAssignment_9(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getPartialDerivativeAccess().getCommentAssignment_9();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getPartialDerivativeAccess().getCommentCommentParserRuleCall_9_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new PartialDerivative_RightParenthesisKeyword_8(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule PartialDerivative ****************/
+
+
+/************ begin Rule ClassModification ****************
+ *
+ * ClassModification:
+ *   classType=ClassType name=IDENT EQUALS type_prefix typeSpecifier=type_specifier
+ *   modification=class_modification? comment=comment;
+ *
+ **/
+
+// classType=ClassType name=IDENT EQUALS type_prefix typeSpecifier=type_specifier
+// modification=class_modification? comment=comment
+protected class ClassModification_Group extends GroupToken {
+	
+	public ClassModification_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassModification_CommentAssignment_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getClassModificationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// classType=ClassType
+protected class ClassModification_ClassTypeAssignment_0 extends AssignmentToken  {
+	
+	public ClassModification_ClassTypeAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getClassTypeAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("classType",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("classType");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.ERC;
+			element = grammarAccess.getClassModificationAccess().getClassTypeClassTypeEnumRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// name=IDENT
+protected class ClassModification_NameAssignment_1 extends AssignmentToken  {
+	
+	public ClassModification_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getNameAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassModification_ClassTypeAssignment_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getClassModificationAccess().getNameIDENTTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// EQUALS
+protected class ClassModification_EQUALSTerminalRuleCall_2 extends UnassignedTextToken {
+
+	public ClassModification_EQUALSTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getEQUALSTerminalRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassModification_NameAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// type_prefix
+protected class ClassModification_Type_prefixParserRuleCall_3 extends UnassignedTextToken {
+
+	public ClassModification_Type_prefixParserRuleCall_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getType_prefixParserRuleCall_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassModification_EQUALSTerminalRuleCall_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// typeSpecifier=type_specifier
+protected class ClassModification_TypeSpecifierAssignment_4 extends AssignmentToken  {
+	
+	public ClassModification_TypeSpecifierAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getTypeSpecifierAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Type_specifier_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("typeSpecifier",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("typeSpecifier");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getType_specifierRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassModificationAccess().getTypeSpecifierType_specifierParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassModification_Type_prefixParserRuleCall_3(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// modification=class_modification?
+protected class ClassModification_ModificationAssignment_5 extends AssignmentToken  {
+	
+	public ClassModification_ModificationAssignment_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getModificationAssignment_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassModificationAccess().getModificationClass_modificationParserRuleCall_5_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassModification_TypeSpecifierAssignment_4(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// comment=comment
+protected class ClassModification_CommentAssignment_6 extends AssignmentToken  {
+	
+	public ClassModification_CommentAssignment_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassModificationAccess().getCommentAssignment_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassModificationAccess().getCommentCommentParserRuleCall_6_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassModification_ModificationAssignment_5(parent, next, actIndex, consumed);
+			case 1: return new ClassModification_TypeSpecifierAssignment_4(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule ClassModification ****************/
+
+
+/************ begin Rule ClassOverloading ****************
+ *
+ * ClassOverloading:
+ *   classType=ClassType name=IDENT EQUALS "overload" "(" name_list ")" comment=comment;
+ *
+ **/
+
+// classType=ClassType name=IDENT EQUALS "overload" "(" name_list ")" comment=comment
+protected class ClassOverloading_Group extends GroupToken {
+	
+	public ClassOverloading_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_CommentAssignment_7(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getClassOverloadingRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// classType=ClassType
+protected class ClassOverloading_ClassTypeAssignment_0 extends AssignmentToken  {
+	
+	public ClassOverloading_ClassTypeAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getClassTypeAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("classType",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("classType");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.ERC;
+			element = grammarAccess.getClassOverloadingAccess().getClassTypeClassTypeEnumRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// name=IDENT
+protected class ClassOverloading_NameAssignment_1 extends AssignmentToken  {
+	
+	public ClassOverloading_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getNameAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_ClassTypeAssignment_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getClassOverloadingAccess().getNameIDENTTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// EQUALS
+protected class ClassOverloading_EQUALSTerminalRuleCall_2 extends UnassignedTextToken {
+
+	public ClassOverloading_EQUALSTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getEQUALSTerminalRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_NameAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "overload"
+protected class ClassOverloading_OverloadKeyword_3 extends KeywordToken  {
+	
+	public ClassOverloading_OverloadKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getOverloadKeyword_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_EQUALSTerminalRuleCall_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "("
+protected class ClassOverloading_LeftParenthesisKeyword_4 extends KeywordToken  {
+	
+	public ClassOverloading_LeftParenthesisKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getLeftParenthesisKeyword_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_OverloadKeyword_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// name_list
+protected class ClassOverloading_Name_listParserRuleCall_5 extends UnassignedTextToken {
+
+	public ClassOverloading_Name_listParserRuleCall_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getName_listParserRuleCall_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_LeftParenthesisKeyword_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ")"
+protected class ClassOverloading_RightParenthesisKeyword_6 extends KeywordToken  {
+	
+	public ClassOverloading_RightParenthesisKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getRightParenthesisKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassOverloading_Name_listParserRuleCall_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// comment=comment
+protected class ClassOverloading_CommentAssignment_7 extends AssignmentToken  {
+	
+	public ClassOverloading_CommentAssignment_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClassOverloadingAccess().getCommentAssignment_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClassOverloadingAccess().getCommentCommentParserRuleCall_7_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ClassOverloading_RightParenthesisKeyword_6(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule ClassOverloading ****************/
+
+
+/************ begin Rule Enumeration ****************
+ *
+ * Enumeration:
+ *   classType=ClassType name=IDENT EQUALS "enumeration" LPAR (ident+=IDENT enumComments+=
+ *   comment (COMMA ident+=IDENT enumComments+=comment)*|COLON) RPAR comment=comment;
+ *
+ **/
+
+// classType=ClassType name=IDENT EQUALS "enumeration" LPAR (ident+=IDENT enumComments+=
+// comment (COMMA ident+=IDENT enumComments+=comment)*|COLON) RPAR comment=comment
+protected class Enumeration_Group extends GroupToken {
+	
+	public Enumeration_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_CommentAssignment_7(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getEnumerationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// classType=ClassType
+protected class Enumeration_ClassTypeAssignment_0 extends AssignmentToken  {
+	
+	public Enumeration_ClassTypeAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getClassTypeAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("classType",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("classType");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.ERC;
+			element = grammarAccess.getEnumerationAccess().getClassTypeClassTypeEnumRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// name=IDENT
+protected class Enumeration_NameAssignment_1 extends AssignmentToken  {
+	
+	public Enumeration_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getNameAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_ClassTypeAssignment_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getEnumerationAccess().getNameIDENTTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// EQUALS
+protected class Enumeration_EQUALSTerminalRuleCall_2 extends UnassignedTextToken {
+
+	public Enumeration_EQUALSTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getEQUALSTerminalRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_NameAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "enumeration"
+protected class Enumeration_EnumerationKeyword_3 extends KeywordToken  {
+	
+	public Enumeration_EnumerationKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getEnumerationKeyword_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_EQUALSTerminalRuleCall_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// LPAR
+protected class Enumeration_LPARTerminalRuleCall_4 extends UnassignedTextToken {
+
+	public Enumeration_LPARTerminalRuleCall_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getLPARTerminalRuleCall_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_EnumerationKeyword_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ident+=IDENT enumComments+=comment (COMMA ident+=IDENT enumComments+=comment)*|COLON
+protected class Enumeration_Alternatives_5 extends AlternativesToken {
+
+	public Enumeration_Alternatives_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getAlternatives_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_Group_5_0(parent, this, 0, inst);
+			case 1: return new Enumeration_COLONTerminalRuleCall_5_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ident+=IDENT enumComments+=comment (COMMA ident+=IDENT enumComments+=comment)*
+protected class Enumeration_Group_5_0 extends GroupToken {
+	
+	public Enumeration_Group_5_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getGroup_5_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_Group_5_0_2(parent, this, 0, inst);
+			case 1: return new Enumeration_EnumCommentsAssignment_5_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ident+=IDENT
+protected class Enumeration_IdentAssignment_5_0_0 extends AssignmentToken  {
+	
+	public Enumeration_IdentAssignment_5_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getIdentAssignment_5_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_LPARTerminalRuleCall_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("ident",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("ident");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getEnumerationAccess().getIdentIDENTTerminalRuleCall_5_0_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// enumComments+=comment
+protected class Enumeration_EnumCommentsAssignment_5_0_1 extends AssignmentToken  {
+	
+	public Enumeration_EnumCommentsAssignment_5_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getEnumCommentsAssignment_5_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("enumComments",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("enumComments");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEnumerationAccess().getEnumCommentsCommentParserRuleCall_5_0_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Enumeration_IdentAssignment_5_0_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// (COMMA ident+=IDENT enumComments+=comment)*
+protected class Enumeration_Group_5_0_2 extends GroupToken {
+	
+	public Enumeration_Group_5_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getGroup_5_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_EnumCommentsAssignment_5_0_2_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// COMMA
+protected class Enumeration_COMMATerminalRuleCall_5_0_2_0 extends UnassignedTextToken {
+
+	public Enumeration_COMMATerminalRuleCall_5_0_2_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getCOMMATerminalRuleCall_5_0_2_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_Group_5_0_2(parent, this, 0, inst);
+			case 1: return new Enumeration_EnumCommentsAssignment_5_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ident+=IDENT
+protected class Enumeration_IdentAssignment_5_0_2_1 extends AssignmentToken  {
+	
+	public Enumeration_IdentAssignment_5_0_2_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getIdentAssignment_5_0_2_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_COMMATerminalRuleCall_5_0_2_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("ident",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("ident");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getEnumerationAccess().getIdentIDENTTerminalRuleCall_5_0_2_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// enumComments+=comment
+protected class Enumeration_EnumCommentsAssignment_5_0_2_2 extends AssignmentToken  {
+	
+	public Enumeration_EnumCommentsAssignment_5_0_2_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getEnumCommentsAssignment_5_0_2_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("enumComments",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("enumComments");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEnumerationAccess().getEnumCommentsCommentParserRuleCall_5_0_2_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Enumeration_IdentAssignment_5_0_2_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// COLON
+protected class Enumeration_COLONTerminalRuleCall_5_1 extends UnassignedTextToken {
+
+	public Enumeration_COLONTerminalRuleCall_5_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getCOLONTerminalRuleCall_5_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_LPARTerminalRuleCall_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// RPAR
+protected class Enumeration_RPARTerminalRuleCall_6 extends UnassignedTextToken {
+
+	public Enumeration_RPARTerminalRuleCall_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getRPARTerminalRuleCall_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Enumeration_Alternatives_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// comment=comment
+protected class Enumeration_CommentAssignment_7 extends AssignmentToken  {
+	
+	public Enumeration_CommentAssignment_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEnumerationAccess().getCommentAssignment_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEnumerationAccess().getCommentCommentParserRuleCall_7_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Enumeration_RPARTerminalRuleCall_6(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule Enumeration ****************/
+
+
+
+
+/************ begin Rule external_clause ****************
+ *
+ * external_clause returns ExternalClause:
+ *   "external" languageSpecification=STRING? external_function_call? annotation=
+ *   annotation? SEMICOLON (extAnnotation=annotation SEMICOLON)?;
+ *
+ **/
+
+// "external" languageSpecification=STRING? external_function_call? annotation=
+// annotation? SEMICOLON (extAnnotation=annotation SEMICOLON)?
+protected class External_clause_Group extends GroupToken {
+	
+	public External_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_Group_5(parent, this, 0, inst);
+			case 1: return new External_clause_SEMICOLONTerminalRuleCall_4(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getExternal_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "external"
+protected class External_clause_ExternalKeyword_0 extends KeywordToken  {
+	
+	public External_clause_ExternalKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getExternalKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// languageSpecification=STRING?
+protected class External_clause_LanguageSpecificationAssignment_1 extends AssignmentToken  {
+	
+	public External_clause_LanguageSpecificationAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getLanguageSpecificationAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_ExternalKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("languageSpecification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("languageSpecification");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getExternal_clauseAccess().getLanguageSpecificationSTRINGTerminalRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// external_function_call?
+protected class External_clause_External_function_callParserRuleCall_2 extends UnassignedTextToken {
+
+	public External_clause_External_function_callParserRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getExternal_function_callParserRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_LanguageSpecificationAssignment_1(parent, this, 0, inst);
+			case 1: return new External_clause_ExternalKeyword_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// annotation=annotation?
+protected class External_clause_AnnotationAssignment_3 extends AssignmentToken  {
+	
+	public External_clause_AnnotationAssignment_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getAnnotationAssignment_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotation",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotation");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getExternal_clauseAccess().getAnnotationAnnotationParserRuleCall_3_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new External_clause_External_function_callParserRuleCall_2(parent, next, actIndex, consumed);
+			case 1: return new External_clause_LanguageSpecificationAssignment_1(parent, next, actIndex, consumed);
+			case 2: return new External_clause_ExternalKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class External_clause_SEMICOLONTerminalRuleCall_4 extends UnassignedTextToken {
+
+	public External_clause_SEMICOLONTerminalRuleCall_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getSEMICOLONTerminalRuleCall_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_AnnotationAssignment_3(parent, this, 0, inst);
+			case 1: return new External_clause_External_function_callParserRuleCall_2(parent, this, 1, inst);
+			case 2: return new External_clause_LanguageSpecificationAssignment_1(parent, this, 2, inst);
+			case 3: return new External_clause_ExternalKeyword_0(parent, this, 3, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (extAnnotation=annotation SEMICOLON)?
+protected class External_clause_Group_5 extends GroupToken {
+	
+	public External_clause_Group_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getGroup_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_SEMICOLONTerminalRuleCall_5_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// extAnnotation=annotation
+protected class External_clause_ExtAnnotationAssignment_5_0 extends AssignmentToken  {
+	
+	public External_clause_ExtAnnotationAssignment_5_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getExtAnnotationAssignment_5_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("extAnnotation",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("extAnnotation");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getExternal_clauseAccess().getExtAnnotationAnnotationParserRuleCall_5_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new External_clause_SEMICOLONTerminalRuleCall_4(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class External_clause_SEMICOLONTerminalRuleCall_5_1 extends UnassignedTextToken {
+
+	public External_clause_SEMICOLONTerminalRuleCall_5_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getExternal_clauseAccess().getSEMICOLONTerminalRuleCall_5_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new External_clause_ExtAnnotationAssignment_5_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule external_clause ****************/
+
+
+
+/************ begin Rule ElementList ****************
+ *
+ * ElementList:
+ *   ((elements+=ClassElement|annotations+=annotation) SEMICOLON)*;
+ *
+ **/
+
+// ((elements+=ClassElement|annotations+=annotation) SEMICOLON)*
+protected class ElementList_Group extends GroupToken {
+	
+	public ElementList_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementListAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList_SEMICOLONTerminalRuleCall_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElementListRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// elements+=ClassElement|annotations+=annotation
+protected class ElementList_Alternatives_0 extends AlternativesToken {
+
+	public ElementList_Alternatives_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getElementListAccess().getAlternatives_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList_ElementsAssignment_0_0(parent, this, 0, inst);
+			case 1: return new ElementList_AnnotationsAssignment_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elements+=ClassElement
+protected class ElementList_ElementsAssignment_0_0 extends AssignmentToken  {
+	
+	public ElementList_ElementsAssignment_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementListAccess().getElementsAssignment_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elements",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elements");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClassElementRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementListAccess().getElementsClassElementParserRuleCall_0_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementList_Group(parent, next, actIndex, consumed);
+			default: return parent.createParentFollower(next, actIndex , index - 1, consumed);
+		}	
+	}	
+}
+
+// annotations+=annotation
+protected class ElementList_AnnotationsAssignment_0_1 extends AssignmentToken  {
+	
+	public ElementList_AnnotationsAssignment_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementListAccess().getAnnotationsAssignment_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotations",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementListAccess().getAnnotationsAnnotationParserRuleCall_0_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementList_Group(parent, next, actIndex, consumed);
+			default: return parent.createParentFollower(next, actIndex , index - 1, consumed);
+		}	
+	}	
+}
+
+
+// SEMICOLON
+protected class ElementList_SEMICOLONTerminalRuleCall_1 extends UnassignedTextToken {
+
+	public ElementList_SEMICOLONTerminalRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementListAccess().getSEMICOLONTerminalRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList_Alternatives_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule ElementList ****************/
+
+
+/************ begin Rule ElementList2 ****************
+ *
+ * ElementList2 returns ElementList:
+ *   "public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+ *   SEMICOLON)*|"protected" {ProtectesElementList} ((elements+=ClassElement|
+ *   annotations+=annotation) SEMICOLON)*;
+ *
+ **/
+
+// "public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+// SEMICOLON)*|"protected" {ProtectesElementList} ((elements+=ClassElement|
+// annotations+=annotation) SEMICOLON)*
+protected class ElementList2_Alternatives extends AlternativesToken {
+
+	public ElementList2_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getElementList2Access().getAlternatives();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_Group_0(parent, this, 0, inst);
+			case 1: return new ElementList2_Group_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElementList2Rule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+// SEMICOLON)*
+protected class ElementList2_Group_0 extends GroupToken {
+	
+	public ElementList2_Group_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementList2Access().getGroup_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_Group_0_2(parent, this, 0, inst);
+			case 1: return new ElementList2_PublicElementListAction_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "public"
+protected class ElementList2_PublicKeyword_0_0 extends KeywordToken  {
+	
+	public ElementList2_PublicKeyword_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElementList2Access().getPublicKeyword_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// {PublicElementList}
+protected class ElementList2_PublicElementListAction_0_1 extends ActionToken  {
+
+	public ElementList2_PublicElementListAction_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Action getGrammarElement() {
+		return grammarAccess.getElementList2Access().getPublicElementListAction_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_PublicKeyword_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	
+	protected IInstanceDescription tryConsumeVal() {
+		if(!current.isInstanceOf(grammarAccess.getElementList2Access().getPublicElementListAction_0_1().getType().getClassifier())) return null;
+		if(!current.isConsumed()) return null;
+		return current;
+	}
+}
+
+// ((elements+=ClassElement|annotations+=annotation) SEMICOLON)*
+protected class ElementList2_Group_0_2 extends GroupToken {
+	
+	public ElementList2_Group_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementList2Access().getGroup_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_SEMICOLONTerminalRuleCall_0_2_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elements+=ClassElement|annotations+=annotation
+protected class ElementList2_Alternatives_0_2_0 extends AlternativesToken {
+
+	public ElementList2_Alternatives_0_2_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getElementList2Access().getAlternatives_0_2_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_ElementsAssignment_0_2_0_0(parent, this, 0, inst);
+			case 1: return new ElementList2_AnnotationsAssignment_0_2_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elements+=ClassElement
+protected class ElementList2_ElementsAssignment_0_2_0_0 extends AssignmentToken  {
+	
+	public ElementList2_ElementsAssignment_0_2_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementList2Access().getElementsAssignment_0_2_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elements",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elements");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClassElementRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementList2Access().getElementsClassElementParserRuleCall_0_2_0_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementList2_Group_0_2(parent, next, actIndex, consumed);
+			case 1: return new ElementList2_PublicElementListAction_0_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// annotations+=annotation
+protected class ElementList2_AnnotationsAssignment_0_2_0_1 extends AssignmentToken  {
+	
+	public ElementList2_AnnotationsAssignment_0_2_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementList2Access().getAnnotationsAssignment_0_2_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotations",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementList2Access().getAnnotationsAnnotationParserRuleCall_0_2_0_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementList2_Group_0_2(parent, next, actIndex, consumed);
+			case 1: return new ElementList2_PublicElementListAction_0_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// SEMICOLON
+protected class ElementList2_SEMICOLONTerminalRuleCall_0_2_1 extends UnassignedTextToken {
+
+	public ElementList2_SEMICOLONTerminalRuleCall_0_2_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementList2Access().getSEMICOLONTerminalRuleCall_0_2_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_Alternatives_0_2_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+// "protected" {ProtectesElementList} ((elements+=ClassElement|annotations+=
+// annotation) SEMICOLON)*
+protected class ElementList2_Group_1 extends GroupToken {
+	
+	public ElementList2_Group_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementList2Access().getGroup_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_Group_1_2(parent, this, 0, inst);
+			case 1: return new ElementList2_ProtectesElementListAction_1_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "protected"
+protected class ElementList2_ProtectedKeyword_1_0 extends KeywordToken  {
+	
+	public ElementList2_ProtectedKeyword_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElementList2Access().getProtectedKeyword_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// {ProtectesElementList}
+protected class ElementList2_ProtectesElementListAction_1_1 extends ActionToken  {
+
+	public ElementList2_ProtectesElementListAction_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Action getGrammarElement() {
+		return grammarAccess.getElementList2Access().getProtectesElementListAction_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_ProtectedKeyword_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	
+	protected IInstanceDescription tryConsumeVal() {
+		if(!current.isInstanceOf(grammarAccess.getElementList2Access().getProtectesElementListAction_1_1().getType().getClassifier())) return null;
+		if(!current.isConsumed()) return null;
+		return current;
+	}
+}
+
+// ((elements+=ClassElement|annotations+=annotation) SEMICOLON)*
+protected class ElementList2_Group_1_2 extends GroupToken {
+	
+	public ElementList2_Group_1_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementList2Access().getGroup_1_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_SEMICOLONTerminalRuleCall_1_2_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elements+=ClassElement|annotations+=annotation
+protected class ElementList2_Alternatives_1_2_0 extends AlternativesToken {
+
+	public ElementList2_Alternatives_1_2_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getElementList2Access().getAlternatives_1_2_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_ElementsAssignment_1_2_0_0(parent, this, 0, inst);
+			case 1: return new ElementList2_AnnotationsAssignment_1_2_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elements+=ClassElement
+protected class ElementList2_ElementsAssignment_1_2_0_0 extends AssignmentToken  {
+	
+	public ElementList2_ElementsAssignment_1_2_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementList2Access().getElementsAssignment_1_2_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elements",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elements");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClassElementRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementList2Access().getElementsClassElementParserRuleCall_1_2_0_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementList2_Group_1_2(parent, next, actIndex, consumed);
+			case 1: return new ElementList2_ProtectesElementListAction_1_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// annotations+=annotation
+protected class ElementList2_AnnotationsAssignment_1_2_0_1 extends AssignmentToken  {
+	
+	public ElementList2_AnnotationsAssignment_1_2_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementList2Access().getAnnotationsAssignment_1_2_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotations",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementList2Access().getAnnotationsAnnotationParserRuleCall_1_2_0_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementList2_Group_1_2(parent, next, actIndex, consumed);
+			case 1: return new ElementList2_ProtectesElementListAction_1_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// SEMICOLON
+protected class ElementList2_SEMICOLONTerminalRuleCall_1_2_1 extends UnassignedTextToken {
+
+	public ElementList2_SEMICOLONTerminalRuleCall_1_2_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementList2Access().getSEMICOLONTerminalRuleCall_1_2_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementList2_Alternatives_1_2_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+
+/************ end Rule ElementList2 ****************/
+
+
+/************ begin Rule ClassElement ****************
+ *
+ * ClassElement:
+ *   import_clause|extends_clause|"redeclare"? "final"? "inner"? "outer"? ((
+ *   ClassDefinition|component_clause)|ReplaceableElementClause); 
+ * 
+ * 
+ * 
+ * 	  
+ * 	  
+ * 	//| defineunit_clause
+ *
+ **/
+
+// import_clause|extends_clause|"redeclare"? "final"? "inner"? "outer"? ((
+// ClassDefinition|component_clause)|ReplaceableElementClause) 
+// 
+// 
+// 
+// 	  
+// 	  
+// 	//| defineunit_clause
+protected class ClassElement_Alternatives extends AlternativesToken {
+
+	public ClassElement_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getAlternatives();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_Import_clauseParserRuleCall_0(parent, this, 0, inst);
+			case 1: return new ClassElement_Extends_clauseParserRuleCall_1(parent, this, 1, inst);
+			case 2: return new ClassElement_Group_2(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getClassElementRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// import_clause
+protected class ClassElement_Import_clauseParserRuleCall_0 extends RuleCallToken {
+	
+	public ClassElement_Import_clauseParserRuleCall_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getImport_clauseParserRuleCall_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Import_clause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getImport_clauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// extends_clause   
+// 	//| defineunit_clause
+protected class ClassElement_Extends_clauseParserRuleCall_1 extends RuleCallToken {
+	
+	public ClassElement_Extends_clauseParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getExtends_clauseParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Extends_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Extends_clause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getExtends_clauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// "redeclare"? "final"? "inner"? "outer"? ((ClassDefinition|component_clause)|
+// ReplaceableElementClause) 
+// 	  
+// 	  
+// 	//| defineunit_clause
+protected class ClassElement_Group_2 extends GroupToken {
+	
+	public ClassElement_Group_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getGroup_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_Alternatives_2_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (ClassDefinition|component_clause)|ReplaceableElementClause
+protected class ClassElement_Alternatives_2_4 extends AlternativesToken {
+
+	public ClassElement_Alternatives_2_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getAlternatives_2_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_Alternatives_2_4_0(parent, this, 0, inst);
+			case 1: return new ClassElement_ReplaceableElementClauseParserRuleCall_2_4_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ClassDefinition|component_clause
+protected class ClassElement_Alternatives_2_4_0 extends AlternativesToken {
+
+	public ClassElement_Alternatives_2_4_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getAlternatives_2_4_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassElement_ClassDefinitionParserRuleCall_2_4_0_0(parent, this, 0, inst);
+			case 1: return new ClassElement_Component_clauseParserRuleCall_2_4_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ClassDefinition
+protected class ClassElement_ClassDefinitionParserRuleCall_2_4_0_0 extends RuleCallToken {
+	
+	public ClassElement_ClassDefinitionParserRuleCall_2_4_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getClassDefinitionParserRuleCall_2_4_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ClassDefinition_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// component_clause
+protected class ClassElement_Component_clauseParserRuleCall_2_4_0_1 extends RuleCallToken {
+	
+	public ClassElement_Component_clauseParserRuleCall_2_4_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getComponent_clauseParserRuleCall_2_4_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Component_clause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getComponent_clauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+// ReplaceableElementClause
+protected class ClassElement_ReplaceableElementClauseParserRuleCall_2_4_1 extends RuleCallToken {
+	
+	public ClassElement_ReplaceableElementClauseParserRuleCall_2_4_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClassElementAccess().getReplaceableElementClauseParserRuleCall_2_4_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ReplaceableElementClause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ReplaceableElementClause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getReplaceableElementClauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+
+
+/************ end Rule ClassElement ****************/
+
+
+/************ begin Rule ReplaceableElementClause ****************
+ *
+ * ReplaceableElementClause:
+ *   "replaceable" entity=( ClassDefinition | component_clause ) constrain=
+ *   constraining_clause?;
+ *
+ **/
+
+// "replaceable" entity=( ClassDefinition | component_clause ) constrain=
+// constraining_clause?
+protected class ReplaceableElementClause_Group extends GroupToken {
+	
+	public ReplaceableElementClause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getReplaceableElementClauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ReplaceableElementClause_ConstrainAssignment_2(parent, this, 0, inst);
+			case 1: return new ReplaceableElementClause_EntityAssignment_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getReplaceableElementClauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "replaceable"
+protected class ReplaceableElementClause_ReplaceableKeyword_0 extends KeywordToken  {
+	
+	public ReplaceableElementClause_ReplaceableKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getReplaceableElementClauseAccess().getReplaceableKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// entity=( ClassDefinition | component_clause )
+protected class ReplaceableElementClause_EntityAssignment_1 extends AssignmentToken  {
+	
+	public ReplaceableElementClause_EntityAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getReplaceableElementClauseAccess().getEntityAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group(this, this, 0, inst);
+			case 1: return new Component_clause_Group(this, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("entity",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("entity");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getReplaceableElementClauseAccess().getEntityClassDefinitionParserRuleCall_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getComponent_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getReplaceableElementClauseAccess().getEntityComponent_clauseParserRuleCall_1_0_1(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ReplaceableElementClause_ReplaceableKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// constrain=constraining_clause?
+protected class ReplaceableElementClause_ConstrainAssignment_2 extends AssignmentToken  {
+	
+	public ReplaceableElementClause_ConstrainAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getReplaceableElementClauseAccess().getConstrainAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("constrain",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("constrain");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getConstraining_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getReplaceableElementClauseAccess().getConstrainConstraining_clauseParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ReplaceableElementClause_EntityAssignment_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule ReplaceableElementClause ****************/
+
+
+/************ begin Rule import_clause ****************
+ *
+ * import_clause returns ImportClause:
+ *   "import" (asName=IDENT EQUALS name=name_path|name=name_path_star) comment=comment; 
+ * 
+ *     
+ * 	            
+ * 	
+ * 
+ * / *
+ * defineunit_clause :
+ * 	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+ * 	;
+ * * /
+ * 
+ * 
+ * / *
+ *  * 2.2.3 Extends
+ *  * /
+ * 
+ * // Note that this is a minor modification of the standard by
+ * // allowing the comment.
+ *
+ **/
+
+// "import" (asName=IDENT EQUALS name=name_path|name=name_path_star) comment=comment
+protected class Import_clause_Group extends GroupToken {
+	
+	public Import_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_CommentAssignment_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getImport_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "import"
+protected class Import_clause_ImportKeyword_0 extends KeywordToken  {
+	
+	public Import_clause_ImportKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getImportKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// asName=IDENT EQUALS name=name_path|name=name_path_star
+protected class Import_clause_Alternatives_1 extends AlternativesToken {
+
+	public Import_clause_Alternatives_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getAlternatives_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_Group_1_0(parent, this, 0, inst);
+			case 1: return new Import_clause_NameAssignment_1_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// asName=IDENT EQUALS name=name_path
+protected class Import_clause_Group_1_0 extends GroupToken {
+	
+	public Import_clause_Group_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getGroup_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_NameAssignment_1_0_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// asName=IDENT
+protected class Import_clause_AsNameAssignment_1_0_0 extends AssignmentToken  {
+	
+	public Import_clause_AsNameAssignment_1_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getAsNameAssignment_1_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_ImportKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("asName",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("asName");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
+			type = AssignmentType.LRC;
+			element = grammarAccess.getImport_clauseAccess().getAsNameIDENTTerminalRuleCall_1_0_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// EQUALS
+protected class Import_clause_EQUALSTerminalRuleCall_1_0_1 extends UnassignedTextToken {
+
+	public Import_clause_EQUALSTerminalRuleCall_1_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getEQUALSTerminalRuleCall_1_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_AsNameAssignment_1_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// name=name_path
+protected class Import_clause_NameAssignment_1_0_2 extends AssignmentToken  {
+	
+	public Import_clause_NameAssignment_1_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getNameAssignment_1_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_EQUALSTerminalRuleCall_1_0_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getImport_clauseAccess().getNameName_pathParserRuleCall_1_0_2_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// name=name_path_star
+protected class Import_clause_NameAssignment_1_1 extends AssignmentToken  {
+	
+	public Import_clause_NameAssignment_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getNameAssignment_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Import_clause_ImportKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getImport_clauseAccess().getNameName_path_starParserRuleCall_1_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// comment=comment
+protected class Import_clause_CommentAssignment_2 extends AssignmentToken  {
+	
+	public Import_clause_CommentAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getImport_clauseAccess().getCommentAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getImport_clauseAccess().getCommentCommentParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Import_clause_Alternatives_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule import_clause ****************/
+
+
+/************ begin Rule extends_clause ****************
+ *
+ * extends_clause returns ExtendsClause:
+ *   "extends" baseClass=name_path modification=class_modification? annotation=
+ *   annotation?; 
+ * 
+ * / *
+ * defineunit_clause :
+ * 	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+ * 	;
+ * * /
+ * 
+ * 
+ * / *
+ *  * 2.2.3 Extends
+ *  * /
+ * 
+ * // Note that this is a minor modification of the standard by
+ * // allowing the comment.
+ *
+ **/
+
+// "extends" baseClass=name_path modification=class_modification? annotation=
+// annotation?
+protected class Extends_clause_Group extends GroupToken {
+	
+	public Extends_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getExtends_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Extends_clause_AnnotationAssignment_3(parent, this, 0, inst);
+			case 1: return new Extends_clause_ModificationAssignment_2(parent, this, 1, inst);
+			case 2: return new Extends_clause_BaseClassAssignment_1(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getExtends_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "extends"
+protected class Extends_clause_ExtendsKeyword_0 extends KeywordToken  {
+	
+	public Extends_clause_ExtendsKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getExtends_clauseAccess().getExtendsKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// baseClass=name_path
+protected class Extends_clause_BaseClassAssignment_1 extends AssignmentToken  {
+	
+	public Extends_clause_BaseClassAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getExtends_clauseAccess().getBaseClassAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Extends_clause_ExtendsKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("baseClass",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("baseClass");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getExtends_clauseAccess().getBaseClassName_pathParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// modification=class_modification?
+protected class Extends_clause_ModificationAssignment_2 extends AssignmentToken  {
+	
+	public Extends_clause_ModificationAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getExtends_clauseAccess().getModificationAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getExtends_clauseAccess().getModificationClass_modificationParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Extends_clause_BaseClassAssignment_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// annotation=annotation?
+protected class Extends_clause_AnnotationAssignment_3 extends AssignmentToken  {
+	
+	public Extends_clause_AnnotationAssignment_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getExtends_clauseAccess().getAnnotationAssignment_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotation",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotation");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getExtends_clauseAccess().getAnnotationAnnotationParserRuleCall_3_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Extends_clause_ModificationAssignment_2(parent, next, actIndex, consumed);
+			case 1: return new Extends_clause_BaseClassAssignment_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule extends_clause ****************/
+
+
+/************ begin Rule constraining_clause ****************
+ *
+ * constraining_clause returns ConstrainingClause:
+ *   ("extends" name=name_path modification=class_modification?|"constrainedby" name=
+ *   name_path modification=class_modification?) comment=comment; 
+ * 
+ *     
+ * 	      
+ * 	        
+ * 	  
+ * 	
+ * 
+ * / *
+ *  * 2.2.4 Component clause
+ *  * /
+ *
+ **/
+
+// ("extends" name=name_path modification=class_modification?|"constrainedby" name=
+// name_path modification=class_modification?) comment=comment
+protected class Constraining_clause_Group extends GroupToken {
+	
+	public Constraining_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_CommentAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getConstraining_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "extends" name=name_path modification=class_modification?|"constrainedby" name=
+// name_path modification=class_modification?
+protected class Constraining_clause_Alternatives_0 extends AlternativesToken {
+
+	public Constraining_clause_Alternatives_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getAlternatives_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_Group_0_0(parent, this, 0, inst);
+			case 1: return new Constraining_clause_Group_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "extends" name=name_path modification=class_modification?
+protected class Constraining_clause_Group_0_0 extends GroupToken {
+	
+	public Constraining_clause_Group_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getGroup_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_ModificationAssignment_0_0_2(parent, this, 0, inst);
+			case 1: return new Constraining_clause_NameAssignment_0_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "extends"
+protected class Constraining_clause_ExtendsKeyword_0_0_0 extends KeywordToken  {
+	
+	public Constraining_clause_ExtendsKeyword_0_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getExtendsKeyword_0_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// name=name_path
+protected class Constraining_clause_NameAssignment_0_0_1 extends AssignmentToken  {
+	
+	public Constraining_clause_NameAssignment_0_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getNameAssignment_0_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_ExtendsKeyword_0_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getConstraining_clauseAccess().getNameName_pathParserRuleCall_0_0_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// modification=class_modification?
+protected class Constraining_clause_ModificationAssignment_0_0_2 extends AssignmentToken  {
+	
+	public Constraining_clause_ModificationAssignment_0_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getModificationAssignment_0_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraining_clauseAccess().getModificationClass_modificationParserRuleCall_0_0_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Constraining_clause_NameAssignment_0_0_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "constrainedby" name=name_path modification=class_modification?
+protected class Constraining_clause_Group_0_1 extends GroupToken {
+	
+	public Constraining_clause_Group_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getGroup_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_ModificationAssignment_0_1_2(parent, this, 0, inst);
+			case 1: return new Constraining_clause_NameAssignment_0_1_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "constrainedby"
+protected class Constraining_clause_ConstrainedbyKeyword_0_1_0 extends KeywordToken  {
+	
+	public Constraining_clause_ConstrainedbyKeyword_0_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getConstrainedbyKeyword_0_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// name=name_path
+protected class Constraining_clause_NameAssignment_0_1_1 extends AssignmentToken  {
+	
+	public Constraining_clause_NameAssignment_0_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getNameAssignment_0_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_ConstrainedbyKeyword_0_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getConstraining_clauseAccess().getNameName_pathParserRuleCall_0_1_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// modification=class_modification?
+protected class Constraining_clause_ModificationAssignment_0_1_2 extends AssignmentToken  {
+	
+	public Constraining_clause_ModificationAssignment_0_1_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getModificationAssignment_0_1_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraining_clauseAccess().getModificationClass_modificationParserRuleCall_0_1_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Constraining_clause_NameAssignment_0_1_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// comment=comment
+protected class Constraining_clause_CommentAssignment_1 extends AssignmentToken  {
+	
+	public Constraining_clause_CommentAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConstraining_clauseAccess().getCommentAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConstraining_clauseAccess().getCommentCommentParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Constraining_clause_Alternatives_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule constraining_clause ****************/
+
+
+/************ begin Rule component_clause ****************
+ *
+ * component_clause returns ComponentClause:
+ *   typePrefix=type_prefix typeSpecifier=type_specifier declarations+=
+ *   component_declaration (COMMA declarations+=component_declaration)*; 
+ * 
+ * / *
+ *  * 2.2.4 Component clause
+ *  * /
+ *
+ **/
+
+// typePrefix=type_prefix typeSpecifier=type_specifier declarations+=
+// component_declaration (COMMA declarations+=component_declaration)*
+protected class Component_clause_Group extends GroupToken {
+	
+	public Component_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_clause_Group_3(parent, this, 0, inst);
+			case 1: return new Component_clause_DeclarationsAssignment_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getComponent_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// typePrefix=type_prefix
+protected class Component_clause_TypePrefixAssignment_0 extends AssignmentToken  {
+	
+	public Component_clause_TypePrefixAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getTypePrefixAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("typePrefix",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("typePrefix");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getComponent_clauseAccess().getTypePrefixType_prefixParserRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// typeSpecifier=type_specifier
+protected class Component_clause_TypeSpecifierAssignment_1 extends AssignmentToken  {
+	
+	public Component_clause_TypeSpecifierAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getTypeSpecifierAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Type_specifier_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("typeSpecifier",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("typeSpecifier");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getType_specifierRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getComponent_clauseAccess().getTypeSpecifierType_specifierParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Component_clause_TypePrefixAssignment_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// declarations+=component_declaration
+protected class Component_clause_DeclarationsAssignment_2 extends AssignmentToken  {
+	
+	public Component_clause_DeclarationsAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getDeclarationsAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("declarations",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("declarations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getComponent_declarationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getComponent_clauseAccess().getDeclarationsComponent_declarationParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Component_clause_TypeSpecifierAssignment_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// (COMMA declarations+=component_declaration)*
+protected class Component_clause_Group_3 extends GroupToken {
+	
+	public Component_clause_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_clause_DeclarationsAssignment_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// COMMA
+protected class Component_clause_COMMATerminalRuleCall_3_0 extends UnassignedTextToken {
+
+	public Component_clause_COMMATerminalRuleCall_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getCOMMATerminalRuleCall_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_clause_Group_3(parent, this, 0, inst);
+			case 1: return new Component_clause_DeclarationsAssignment_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// declarations+=component_declaration
+protected class Component_clause_DeclarationsAssignment_3_1 extends AssignmentToken  {
+	
+	public Component_clause_DeclarationsAssignment_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_clauseAccess().getDeclarationsAssignment_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("declarations",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("declarations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getComponent_declarationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getComponent_clauseAccess().getDeclarationsComponent_declarationParserRuleCall_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Component_clause_COMMATerminalRuleCall_3_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+/************ end Rule component_clause ****************/
+
+
+
+/************ begin Rule type_specifier ****************
+ *
+ * type_specifier returns TypeSpecifier:
+ *   name=name_path subscripts=array_subscripts?; 
+ * 
+ *     
+ * 	
+ * 	// TODO MML expr?
+ * 	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+ *
+ **/
+
+// name=name_path subscripts=array_subscripts? 
+// 	
+// 	// TODO MML expr?
+// 	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+protected class Type_specifier_Group extends GroupToken {
+	
+	public Type_specifier_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getType_specifierAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Type_specifier_SubscriptsAssignment_1(parent, this, 0, inst);
+			case 1: return new Type_specifier_NameAssignment_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getType_specifierRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// name=name_path 
+// 	
+// 	// TODO MML expr?
+// 	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+protected class Type_specifier_NameAssignment_0 extends AssignmentToken  {
+	
+	public Type_specifier_NameAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getType_specifierAccess().getNameAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("name",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("name");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getType_specifierAccess().getNameName_pathParserRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// subscripts=array_subscripts?
+protected class Type_specifier_SubscriptsAssignment_1 extends AssignmentToken  {
+	
+	public Type_specifier_SubscriptsAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getType_specifierAccess().getSubscriptsAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Type_specifier_NameAssignment_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("subscripts",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("subscripts");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getType_specifierAccess().getSubscriptsArray_subscriptsParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+/************ end Rule type_specifier ****************/
+
+
+/************ begin Rule component_declaration ****************
+ *
+ * component_declaration returns ComponentDeclaration:
+ *   IDENT subscripts=array_subscripts? modification=modification? ("if" condition=
+ *   expression)? comment=comment; 
+ * 
+ *     
+ * 	          
+ * 	
+ * 
+ * / *
+ *  * 2.2.5 Modification
+ *  * /
+ *
+ **/
+
+// IDENT subscripts=array_subscripts? modification=modification? ("if" condition=
+// expression)? comment=comment
+protected class Component_declaration_Group extends GroupToken {
+	
+	public Component_declaration_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_CommentAssignment_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getComponent_declarationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// IDENT
+protected class Component_declaration_IDENTTerminalRuleCall_0 extends UnassignedTextToken {
+
+	public Component_declaration_IDENTTerminalRuleCall_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getIDENTTerminalRuleCall_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// subscripts=array_subscripts?
+protected class Component_declaration_SubscriptsAssignment_1 extends AssignmentToken  {
+	
+	public Component_declaration_SubscriptsAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getSubscriptsAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_IDENTTerminalRuleCall_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("subscripts",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("subscripts");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getComponent_declarationAccess().getSubscriptsArray_subscriptsParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// modification=modification?
+protected class Component_declaration_ModificationAssignment_2 extends AssignmentToken  {
+	
+	public Component_declaration_ModificationAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getModificationAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Modification_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getModificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getComponent_declarationAccess().getModificationModificationParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Component_declaration_SubscriptsAssignment_1(parent, next, actIndex, consumed);
+			case 1: return new Component_declaration_IDENTTerminalRuleCall_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("if" condition=expression)?
+protected class Component_declaration_Group_3 extends GroupToken {
+	
+	public Component_declaration_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_ConditionAssignment_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "if"
+protected class Component_declaration_IfKeyword_3_0 extends KeywordToken  {
+	
+	public Component_declaration_IfKeyword_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getIfKeyword_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_ModificationAssignment_2(parent, this, 0, inst);
+			case 1: return new Component_declaration_SubscriptsAssignment_1(parent, this, 1, inst);
+			case 2: return new Component_declaration_IDENTTerminalRuleCall_0(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class Component_declaration_ConditionAssignment_3_1 extends AssignmentToken  {
+	
+	public Component_declaration_ConditionAssignment_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getConditionAssignment_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Component_declaration_IfKeyword_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getComponent_declarationAccess().getConditionExpressionParserRuleCall_3_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// comment=comment
+protected class Component_declaration_CommentAssignment_4 extends AssignmentToken  {
+	
+	public Component_declaration_CommentAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComponent_declarationAccess().getCommentAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getComponent_declarationAccess().getCommentCommentParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Component_declaration_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Component_declaration_ModificationAssignment_2(parent, next, actIndex, consumed);
+			case 2: return new Component_declaration_SubscriptsAssignment_1(parent, next, actIndex, consumed);
+			case 3: return new Component_declaration_IDENTTerminalRuleCall_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule component_declaration ****************/
+
+
+/************ begin Rule modification ****************
+ *
+ * modification returns Modification:
+ *   class_modification|SimpleModification; 
+ * 
+ * / *
+ *  * 2.2.5 Modification
+ *  * /
+ *
+ **/
+
+// class_modification|SimpleModification 
+// 
+// / *
+//  * 2.2.5 Modification
+//  * /
+protected class Modification_Alternatives extends AlternativesToken {
+
+	public Modification_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getModificationAccess().getAlternatives();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Modification_Class_modificationParserRuleCall_0(parent, this, 0, inst);
+			case 1: return new Modification_SimpleModificationParserRuleCall_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getModificationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// class_modification
+protected class Modification_Class_modificationParserRuleCall_0 extends RuleCallToken {
+	
+	public Modification_Class_modificationParserRuleCall_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getModificationAccess().getClass_modificationParserRuleCall_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Class_modification_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// SimpleModification
+protected class Modification_SimpleModificationParserRuleCall_1 extends RuleCallToken {
+	
+	public Modification_SimpleModificationParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getModificationAccess().getSimpleModificationParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new SimpleModification_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(SimpleModification_Alternatives.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getSimpleModificationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+/************ end Rule modification ****************/
+
+
+/************ begin Rule SimpleModification ****************
+ *
+ * SimpleModification:
+ *   EQUALS expression=expression|ASSIGN expression=expression;
+ *
+ **/
+
+// EQUALS expression=expression|ASSIGN expression=expression
+protected class SimpleModification_Alternatives extends AlternativesToken {
+
+	public SimpleModification_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getAlternatives();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new SimpleModification_Group_0(parent, this, 0, inst);
+			case 1: return new SimpleModification_Group_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getSimpleModificationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// EQUALS expression=expression
+protected class SimpleModification_Group_0 extends GroupToken {
+	
+	public SimpleModification_Group_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getGroup_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new SimpleModification_ExpressionAssignment_0_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// EQUALS
+protected class SimpleModification_EQUALSTerminalRuleCall_0_0 extends UnassignedTextToken {
+
+	public SimpleModification_EQUALSTerminalRuleCall_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getEQUALSTerminalRuleCall_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// expression=expression
+protected class SimpleModification_ExpressionAssignment_0_1 extends AssignmentToken  {
+	
+	public SimpleModification_ExpressionAssignment_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getExpressionAssignment_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new SimpleModification_EQUALSTerminalRuleCall_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("expression",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("expression");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getSimpleModificationAccess().getExpressionExpressionParserRuleCall_0_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+// ASSIGN expression=expression
+protected class SimpleModification_Group_1 extends GroupToken {
+	
+	public SimpleModification_Group_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getGroup_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new SimpleModification_ExpressionAssignment_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ASSIGN
+protected class SimpleModification_ASSIGNTerminalRuleCall_1_0 extends UnassignedTextToken {
+
+	public SimpleModification_ASSIGNTerminalRuleCall_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getASSIGNTerminalRuleCall_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// expression=expression
+protected class SimpleModification_ExpressionAssignment_1_1 extends AssignmentToken  {
+	
+	public SimpleModification_ExpressionAssignment_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSimpleModificationAccess().getExpressionAssignment_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new SimpleModification_ASSIGNTerminalRuleCall_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("expression",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("expression");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getSimpleModificationAccess().getExpressionExpressionParserRuleCall_1_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule SimpleModification ****************/
+
+
+/************ begin Rule class_modification ****************
+ *
+ * class_modification returns ClassModification:
+ *   LPAR (arguments+=argument (COMMA arguments+=argument)*)? RPAR (EQUALS expression=
+ *   expression)?;
+ *
+ **/
+
+// LPAR (arguments+=argument (COMMA arguments+=argument)*)? RPAR (EQUALS expression=
+// expression)?
+protected class Class_modification_Group extends GroupToken {
+	
+	public Class_modification_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group_3(parent, this, 0, inst);
+			case 1: return new Class_modification_RPARTerminalRuleCall_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// LPAR
+protected class Class_modification_LPARTerminalRuleCall_0 extends UnassignedTextToken {
+
+	public Class_modification_LPARTerminalRuleCall_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getLPARTerminalRuleCall_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// (arguments+=argument (COMMA arguments+=argument)*)?
+protected class Class_modification_Group_1 extends GroupToken {
+	
+	public Class_modification_Group_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getGroup_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group_1_1(parent, this, 0, inst);
+			case 1: return new Class_modification_ArgumentsAssignment_1_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// arguments+=argument
+protected class Class_modification_ArgumentsAssignment_1_0 extends AssignmentToken  {
+	
+	public Class_modification_ArgumentsAssignment_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getArgumentsAssignment_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Argument_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("arguments",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("arguments");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getArgumentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClass_modificationAccess().getArgumentsArgumentParserRuleCall_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Class_modification_LPARTerminalRuleCall_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// (COMMA arguments+=argument)*
+protected class Class_modification_Group_1_1 extends GroupToken {
+	
+	public Class_modification_Group_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getGroup_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_ArgumentsAssignment_1_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// COMMA
+protected class Class_modification_COMMATerminalRuleCall_1_1_0 extends UnassignedTextToken {
+
+	public Class_modification_COMMATerminalRuleCall_1_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getCOMMATerminalRuleCall_1_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group_1_1(parent, this, 0, inst);
+			case 1: return new Class_modification_ArgumentsAssignment_1_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// arguments+=argument
+protected class Class_modification_ArgumentsAssignment_1_1_1 extends AssignmentToken  {
+	
+	public Class_modification_ArgumentsAssignment_1_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getArgumentsAssignment_1_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Argument_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("arguments",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("arguments");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getArgumentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getClass_modificationAccess().getArgumentsArgumentParserRuleCall_1_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Class_modification_COMMATerminalRuleCall_1_1_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// RPAR
+protected class Class_modification_RPARTerminalRuleCall_2 extends UnassignedTextToken {
+
+	public Class_modification_RPARTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getRPARTerminalRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group_1(parent, this, 0, inst);
+			case 1: return new Class_modification_LPARTerminalRuleCall_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (EQUALS expression=expression)?
+protected class Class_modification_Group_3 extends GroupToken {
+	
+	public Class_modification_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_ExpressionAssignment_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// EQUALS
+protected class Class_modification_EQUALSTerminalRuleCall_3_0 extends UnassignedTextToken {
+
+	public Class_modification_EQUALSTerminalRuleCall_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getEQUALSTerminalRuleCall_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_RPARTerminalRuleCall_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// expression=expression
+protected class Class_modification_ExpressionAssignment_3_1 extends AssignmentToken  {
+	
+	public Class_modification_ExpressionAssignment_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getClass_modificationAccess().getExpressionAssignment_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_EQUALSTerminalRuleCall_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("expression",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("expression");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getClass_modificationAccess().getExpressionExpressionParserRuleCall_3_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule class_modification ****************/
+
+
+/************ begin Rule argument ****************
+ *
+ * argument:
+ *   "each"? "final"? (ElementModification|ElementReplaceableClause)|
+ *   ElementRedeclaration;
+ *
+ **/
+
+// "each"? "final"? (ElementModification|ElementReplaceableClause)|
+// ElementRedeclaration
+protected class Argument_Alternatives extends AlternativesToken {
+
+	public Argument_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getArgumentAccess().getAlternatives();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Argument_Group_0(parent, this, 0, inst);
+			case 1: return new Argument_ElementRedeclarationParserRuleCall_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getArgumentRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "each"? "final"? (ElementModification|ElementReplaceableClause)
+protected class Argument_Group_0 extends GroupToken {
+	
+	public Argument_Group_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getArgumentAccess().getGroup_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Argument_Alternatives_0_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ElementModification|ElementReplaceableClause
+protected class Argument_Alternatives_0_2 extends AlternativesToken {
+
+	public Argument_Alternatives_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getArgumentAccess().getAlternatives_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Argument_ElementModificationParserRuleCall_0_2_0(parent, this, 0, inst);
+			case 1: return new Argument_ElementReplaceableClauseParserRuleCall_0_2_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ElementModification
+protected class Argument_ElementModificationParserRuleCall_0_2_0 extends RuleCallToken {
+	
+	public Argument_ElementModificationParserRuleCall_0_2_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getArgumentAccess().getElementModificationParserRuleCall_0_2_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementModification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ElementModification_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getElementModificationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// ElementReplaceableClause
+protected class Argument_ElementReplaceableClauseParserRuleCall_0_2_1 extends RuleCallToken {
+	
+	public Argument_ElementReplaceableClauseParserRuleCall_0_2_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getArgumentAccess().getElementReplaceableClauseParserRuleCall_0_2_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementReplaceableClause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ElementReplaceableClause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+
+// ElementRedeclaration
+protected class Argument_ElementRedeclarationParserRuleCall_1 extends RuleCallToken {
+	
+	public Argument_ElementRedeclarationParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getArgumentAccess().getElementRedeclarationParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ElementRedeclaration_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getElementRedeclarationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+/************ end Rule argument ****************/
+
+
+/************ begin Rule ElementModification ****************
+ *
+ * ElementModification:
+ *   componetRef=component_reference modification=modification? comment=string_comment?
+ * ;
+ *
+ **/
+
+// componetRef=component_reference modification=modification? comment=string_comment?
+protected class ElementModification_Group extends GroupToken {
+	
+	public ElementModification_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementModificationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementModification_CommentAssignment_2(parent, this, 0, inst);
+			case 1: return new ElementModification_ModificationAssignment_1(parent, this, 1, inst);
+			case 2: return new ElementModification_ComponetRefAssignment_0(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElementModificationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// componetRef=component_reference
+protected class ElementModification_ComponetRefAssignment_0 extends AssignmentToken  {
+	
+	public ElementModification_ComponetRefAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementModificationAccess().getComponetRefAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("componetRef",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("componetRef");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getElementModificationAccess().getComponetRefComponent_referenceParserRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// modification=modification?
+protected class ElementModification_ModificationAssignment_1 extends AssignmentToken  {
+	
+	public ElementModification_ModificationAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementModificationAccess().getModificationAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Modification_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getModificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementModificationAccess().getModificationModificationParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementModification_ComponetRefAssignment_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// comment=string_comment?
+protected class ElementModification_CommentAssignment_2 extends AssignmentToken  {
+	
+	public ElementModification_CommentAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementModificationAccess().getCommentAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementModification_ModificationAssignment_1(parent, this, 0, inst);
+			case 1: return new ElementModification_ComponetRefAssignment_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getElementModificationAccess().getCommentString_commentParserRuleCall_2_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+/************ end Rule ElementModification ****************/
+
+
+/************ begin Rule ElementRedeclaration ****************
+ *
+ * ElementRedeclaration:
+ *   "redeclare" "each"? "final"? ((ClassDefinition|ElementComponentClause)|
+ *   ElementReplaceableClause);
+ *
+ **/
+
+// "redeclare" "each"? "final"? ((ClassDefinition|ElementComponentClause)|
+// ElementReplaceableClause)
+protected class ElementRedeclaration_Group extends GroupToken {
+	
+	public ElementRedeclaration_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_Alternatives_3(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElementRedeclarationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "redeclare"
+protected class ElementRedeclaration_RedeclareKeyword_0 extends KeywordToken  {
+	
+	public ElementRedeclaration_RedeclareKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getRedeclareKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// (ClassDefinition|ElementComponentClause)|ElementReplaceableClause
+protected class ElementRedeclaration_Alternatives_3 extends AlternativesToken {
+
+	public ElementRedeclaration_Alternatives_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getAlternatives_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_Alternatives_3_0(parent, this, 0, inst);
+			case 1: return new ElementRedeclaration_ElementReplaceableClauseParserRuleCall_3_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ClassDefinition|ElementComponentClause
+protected class ElementRedeclaration_Alternatives_3_0 extends AlternativesToken {
+
+	public ElementRedeclaration_Alternatives_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getAlternatives_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_ClassDefinitionParserRuleCall_3_0_0(parent, this, 0, inst);
+			case 1: return new ElementRedeclaration_ElementComponentClauseParserRuleCall_3_0_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// ClassDefinition
+protected class ElementRedeclaration_ClassDefinitionParserRuleCall_3_0_0 extends RuleCallToken {
+	
+	public ElementRedeclaration_ClassDefinitionParserRuleCall_3_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getClassDefinitionParserRuleCall_3_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ClassDefinition_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_RedeclareKeyword_0(parent, next, actIndex, inst);
+			default: return null;
+		}	
+	}	
+}
+
+// ElementComponentClause
+protected class ElementRedeclaration_ElementComponentClauseParserRuleCall_3_0_1 extends RuleCallToken {
+	
+	public ElementRedeclaration_ElementComponentClauseParserRuleCall_3_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getElementComponentClauseParserRuleCall_3_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementComponentClause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ElementComponentClause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getElementComponentClauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_RedeclareKeyword_0(parent, next, actIndex, inst);
+			default: return null;
+		}	
+	}	
+}
+
+
+// ElementReplaceableClause
+protected class ElementRedeclaration_ElementReplaceableClauseParserRuleCall_3_1 extends RuleCallToken {
+	
+	public ElementRedeclaration_ElementReplaceableClauseParserRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementRedeclarationAccess().getElementReplaceableClauseParserRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementReplaceableClause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(ElementReplaceableClause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementRedeclaration_RedeclareKeyword_0(parent, next, actIndex, inst);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+/************ end Rule ElementRedeclaration ****************/
+
+
+/************ begin Rule ElementReplaceableClause ****************
+ *
+ * ElementReplaceableClause:
+ *   "replaceable" element=( ClassDefinition | ElementComponentClause ) constraint=
+ *   constraining_clause?;
+ *
+ **/
+
+// "replaceable" element=( ClassDefinition | ElementComponentClause ) constraint=
+// constraining_clause?
+protected class ElementReplaceableClause_Group extends GroupToken {
+	
+	public ElementReplaceableClause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementReplaceableClauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementReplaceableClause_ConstraintAssignment_2(parent, this, 0, inst);
+			case 1: return new ElementReplaceableClause_ElementAssignment_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "replaceable"
+protected class ElementReplaceableClause_ReplaceableKeyword_0 extends KeywordToken  {
+	
+	public ElementReplaceableClause_ReplaceableKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElementReplaceableClauseAccess().getReplaceableKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// element=( ClassDefinition | ElementComponentClause )
+protected class ElementReplaceableClause_ElementAssignment_1 extends AssignmentToken  {
+	
+	public ElementReplaceableClause_ElementAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementReplaceableClauseAccess().getElementAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ClassDefinition_Group(this, this, 0, inst);
+			case 1: return new ElementComponentClause_Group(this, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("element",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("element");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getClassDefinitionRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementReplaceableClauseAccess().getElementClassDefinitionParserRuleCall_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getElementComponentClauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementReplaceableClauseAccess().getElementElementComponentClauseParserRuleCall_1_0_1(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementReplaceableClause_ReplaceableKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// constraint=constraining_clause?
+protected class ElementReplaceableClause_ConstraintAssignment_2 extends AssignmentToken  {
+	
+	public ElementReplaceableClause_ConstraintAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementReplaceableClauseAccess().getConstraintAssignment_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Constraining_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("constraint",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("constraint");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getConstraining_clauseRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementReplaceableClauseAccess().getConstraintConstraining_clauseParserRuleCall_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementReplaceableClause_ElementAssignment_1(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule ElementReplaceableClause ****************/
+
+
+/************ begin Rule ElementComponentClause ****************
+ *
+ * ElementComponentClause:
+ *   typePrefix=type_prefix typeSpecifier=type_specifier IDENT subscripts=
+ *   array_subscripts? modification=modification? comment=comment; 
+ * 	
+ *   
+ * 	       
+ * 	  
+ * 	
+ * 
+ * 
+ * / *
+ *  * 2.2.6 Equations
+ *  * /
+ *
+ **/
+
+// typePrefix=type_prefix typeSpecifier=type_specifier IDENT subscripts=
+// array_subscripts? modification=modification? comment=comment
+protected class ElementComponentClause_Group extends GroupToken {
+	
+	public ElementComponentClause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementComponentClause_CommentAssignment_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElementComponentClauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// typePrefix=type_prefix
+protected class ElementComponentClause_TypePrefixAssignment_0 extends AssignmentToken  {
+	
+	public ElementComponentClause_TypePrefixAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getTypePrefixAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("typePrefix",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("typePrefix");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getElementComponentClauseAccess().getTypePrefixType_prefixParserRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// typeSpecifier=type_specifier
+protected class ElementComponentClause_TypeSpecifierAssignment_1 extends AssignmentToken  {
+	
+	public ElementComponentClause_TypeSpecifierAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getTypeSpecifierAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Type_specifier_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("typeSpecifier",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("typeSpecifier");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getType_specifierRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementComponentClauseAccess().getTypeSpecifierType_specifierParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementComponentClause_TypePrefixAssignment_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// IDENT
+protected class ElementComponentClause_IDENTTerminalRuleCall_2 extends UnassignedTextToken {
+
+	public ElementComponentClause_IDENTTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getIDENTTerminalRuleCall_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementComponentClause_TypeSpecifierAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// subscripts=array_subscripts?
+protected class ElementComponentClause_SubscriptsAssignment_3 extends AssignmentToken  {
+	
+	public ElementComponentClause_SubscriptsAssignment_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getSubscriptsAssignment_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new ElementComponentClause_IDENTTerminalRuleCall_2(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("subscripts",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("subscripts");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getElementComponentClauseAccess().getSubscriptsArray_subscriptsParserRuleCall_3_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// modification=modification?
+protected class ElementComponentClause_ModificationAssignment_4 extends AssignmentToken  {
+	
+	public ElementComponentClause_ModificationAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getModificationAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Modification_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("modification",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("modification");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getModificationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementComponentClauseAccess().getModificationModificationParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementComponentClause_SubscriptsAssignment_3(parent, next, actIndex, consumed);
+			case 1: return new ElementComponentClause_IDENTTerminalRuleCall_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// comment=comment
+protected class ElementComponentClause_CommentAssignment_5 extends AssignmentToken  {
+	
+	public ElementComponentClause_CommentAssignment_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElementComponentClauseAccess().getCommentAssignment_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElementComponentClauseAccess().getCommentCommentParserRuleCall_5_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ElementComponentClause_ModificationAssignment_4(parent, next, actIndex, consumed);
+			case 1: return new ElementComponentClause_SubscriptsAssignment_3(parent, next, actIndex, consumed);
+			case 2: return new ElementComponentClause_IDENTTerminalRuleCall_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule ElementComponentClause ****************/
+
+
+/************ begin Rule equation_rule_clause ****************
+ *
+ * equation_rule_clause returns EquationClause:
+ *   "equation" (equationRules+=equation_rule SEMICOLON|annotations+=annotation
+ *   SEMICOLON)+; 
+ * 
+ * 
+ * / *
+ *  * 2.2.6 Equations
+ *  * /
+ *
+ **/
+
+// "equation" (equationRules+=equation_rule SEMICOLON|annotations+=annotation
+// SEMICOLON)+
+protected class Equation_rule_clause_Group extends GroupToken {
+	
+	public Equation_rule_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_Alternatives_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "equation"
+protected class Equation_rule_clause_EquationKeyword_0 extends KeywordToken  {
+	
+	public Equation_rule_clause_EquationKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getEquationKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// (equationRules+=equation_rule SEMICOLON|annotations+=annotation SEMICOLON)+
+protected class Equation_rule_clause_Alternatives_1 extends AlternativesToken {
+
+	public Equation_rule_clause_Alternatives_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getAlternatives_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_Group_1_0(parent, this, 0, inst);
+			case 1: return new Equation_rule_clause_Group_1_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// equationRules+=equation_rule SEMICOLON
+protected class Equation_rule_clause_Group_1_0 extends GroupToken {
+	
+	public Equation_rule_clause_Group_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getGroup_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_SEMICOLONTerminalRuleCall_1_0_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// equationRules+=equation_rule
+protected class Equation_rule_clause_EquationRulesAssignment_1_0_0 extends AssignmentToken  {
+	
+	public Equation_rule_clause_EquationRulesAssignment_1_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getEquationRulesAssignment_1_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("equationRules",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("equationRules");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEquation_rule_clauseAccess().getEquationRulesEquation_ruleParserRuleCall_1_0_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Equation_rule_clause_Alternatives_1(parent, next, actIndex, consumed);
+			case 1: return new Equation_rule_clause_EquationKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Equation_rule_clause_SEMICOLONTerminalRuleCall_1_0_1 extends UnassignedTextToken {
+
+	public Equation_rule_clause_SEMICOLONTerminalRuleCall_1_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getSEMICOLONTerminalRuleCall_1_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_EquationRulesAssignment_1_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// annotations+=annotation SEMICOLON
+protected class Equation_rule_clause_Group_1_1 extends GroupToken {
+	
+	public Equation_rule_clause_Group_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getGroup_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_SEMICOLONTerminalRuleCall_1_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// annotations+=annotation
+protected class Equation_rule_clause_AnnotationsAssignment_1_1_0 extends AssignmentToken  {
+	
+	public Equation_rule_clause_AnnotationsAssignment_1_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getAnnotationsAssignment_1_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotations",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEquation_rule_clauseAccess().getAnnotationsAnnotationParserRuleCall_1_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Equation_rule_clause_Alternatives_1(parent, next, actIndex, consumed);
+			case 1: return new Equation_rule_clause_EquationKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Equation_rule_clause_SEMICOLONTerminalRuleCall_1_1_1 extends UnassignedTextToken {
+
+	public Equation_rule_clause_SEMICOLONTerminalRuleCall_1_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_rule_clauseAccess().getSEMICOLONTerminalRuleCall_1_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_AnnotationsAssignment_1_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+
+/************ end Rule equation_rule_clause ****************/
+
+
+/************ begin Rule algorithm_clause ****************
+ *
+ * algorithm_clause:
+ *   "algorithm" (algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)
+ *   +;
+ *
+ **/
+
+// "algorithm" (algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)
+// +
+protected class Algorithm_clause_Group extends GroupToken {
+	
+	public Algorithm_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_Alternatives_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "algorithm"
+protected class Algorithm_clause_AlgorithmKeyword_0 extends KeywordToken  {
+	
+	public Algorithm_clause_AlgorithmKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getAlgorithmKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// (algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)+
+protected class Algorithm_clause_Alternatives_1 extends AlternativesToken {
+
+	public Algorithm_clause_Alternatives_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getAlternatives_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_Group_1_0(parent, this, 0, inst);
+			case 1: return new Algorithm_clause_Group_1_1(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// algorithmRules+=algorithm SEMICOLON
+protected class Algorithm_clause_Group_1_0 extends GroupToken {
+	
+	public Algorithm_clause_Group_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getGroup_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_SEMICOLONTerminalRuleCall_1_0_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// algorithmRules+=algorithm
+protected class Algorithm_clause_AlgorithmRulesAssignment_1_0_0 extends AssignmentToken  {
+	
+	public Algorithm_clause_AlgorithmRulesAssignment_1_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getAlgorithmRulesAssignment_1_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("algorithmRules",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("algorithmRules");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithmRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getAlgorithm_clauseAccess().getAlgorithmRulesAlgorithmParserRuleCall_1_0_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Algorithm_clause_Alternatives_1(parent, next, actIndex, consumed);
+			case 1: return new Algorithm_clause_AlgorithmKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Algorithm_clause_SEMICOLONTerminalRuleCall_1_0_1 extends UnassignedTextToken {
+
+	public Algorithm_clause_SEMICOLONTerminalRuleCall_1_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getSEMICOLONTerminalRuleCall_1_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_AlgorithmRulesAssignment_1_0_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// annotations+=annotation SEMICOLON
+protected class Algorithm_clause_Group_1_1 extends GroupToken {
+	
+	public Algorithm_clause_Group_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getGroup_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_SEMICOLONTerminalRuleCall_1_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// annotations+=annotation
+protected class Algorithm_clause_AnnotationsAssignment_1_1_0 extends AssignmentToken  {
+	
+	public Algorithm_clause_AnnotationsAssignment_1_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getAnnotationsAssignment_1_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotations",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getAlgorithm_clauseAccess().getAnnotationsAnnotationParserRuleCall_1_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Algorithm_clause_Alternatives_1(parent, next, actIndex, consumed);
+			case 1: return new Algorithm_clause_AlgorithmKeyword_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Algorithm_clause_SEMICOLONTerminalRuleCall_1_1_1 extends UnassignedTextToken {
+
+	public Algorithm_clause_SEMICOLONTerminalRuleCall_1_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithm_clauseAccess().getSEMICOLONTerminalRuleCall_1_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_AnnotationsAssignment_1_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+
+/************ end Rule algorithm_clause ****************/
+
+
+/************ begin Rule initial_equation_rule_clause ****************
+ *
+ * initial_equation_rule_clause:
+ *   "initial" equation_rule_clause;
+ *
+ **/
+
+// "initial" equation_rule_clause
+protected class Initial_equation_rule_clause_Group extends GroupToken {
+	
+	public Initial_equation_rule_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getInitial_equation_rule_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Initial_equation_rule_clause_Equation_rule_clauseParserRuleCall_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getInitial_equation_rule_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "initial"
+protected class Initial_equation_rule_clause_InitialKeyword_0 extends KeywordToken  {
+	
+	public Initial_equation_rule_clause_InitialKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInitial_equation_rule_clauseAccess().getInitialKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// equation_rule_clause
+protected class Initial_equation_rule_clause_Equation_rule_clauseParserRuleCall_1 extends RuleCallToken {
+	
+	public Initial_equation_rule_clause_Equation_rule_clauseParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getInitial_equation_rule_clauseAccess().getEquation_rule_clauseParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Equation_rule_clause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Initial_equation_rule_clause_InitialKeyword_0(parent, next, actIndex, inst);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule initial_equation_rule_clause ****************/
+
+
+/************ begin Rule initial_algorithm_clause ****************
+ *
+ * initial_algorithm_clause:
+ *   "initial" algorithm_clause;
+ *
+ **/
+
+// "initial" algorithm_clause
+protected class Initial_algorithm_clause_Group extends GroupToken {
+	
+	public Initial_algorithm_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getInitial_algorithm_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Initial_algorithm_clause_Algorithm_clauseParserRuleCall_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getInitial_algorithm_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "initial"
+protected class Initial_algorithm_clause_InitialKeyword_0 extends KeywordToken  {
+	
+	public Initial_algorithm_clause_InitialKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInitial_algorithm_clauseAccess().getInitialKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// algorithm_clause
+protected class Initial_algorithm_clause_Algorithm_clauseParserRuleCall_1 extends RuleCallToken {
+	
+	public Initial_algorithm_clause_Algorithm_clauseParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getInitial_algorithm_clauseAccess().getAlgorithm_clauseParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Algorithm_clause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Initial_algorithm_clause_InitialKeyword_0(parent, next, actIndex, inst);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule initial_algorithm_clause ****************/
+
+
+/************ begin Rule equation_rule ****************
+ *
+ * equation_rule:
+ *   (equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+ *   when_clause_e) comment=comment; 
+ * 
+ *   
+ * 	  	 
+ * 	  
+ * 	  
+ * 	  
+ * 	     
+ * 	//| FAILURE LPAR equation_rule RPAR
+ * 	 //| EQUALITY LPAR equation_rule RPAR
+ *
+ **/
+
+// (equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+// when_clause_e) comment=comment 
+// 	  	 
+// 	  
+// 	  
+// 	  
+// 	     
+// 	//| FAILURE LPAR equation_rule RPAR
+// 	 //| EQUALITY LPAR equation_rule RPAR
+protected class Equation_rule_Group extends GroupToken {
+	
+	public Equation_rule_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_CommentAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+// when_clause_e 
+// 	  	 
+// 	  
+// 	  
+// 	  
+// 	     
+// 	//| FAILURE LPAR equation_rule RPAR
+// 	 //| EQUALITY LPAR equation_rule RPAR
+protected class Equation_rule_Alternatives_0 extends AlternativesToken {
+
+	public Equation_rule_Alternatives_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getAlternatives_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Equality_equation_ruleParserRuleCall_0_0(parent, this, 0, inst);
+			case 1: return new Equation_rule_Conditional_equation_rule_eParserRuleCall_0_1(parent, this, 1, inst);
+			case 2: return new Equation_rule_For_clause_eParserRuleCall_0_2(parent, this, 2, inst);
+			case 3: return new Equation_rule_Connect_clauseParserRuleCall_0_3(parent, this, 3, inst);
+			case 4: return new Equation_rule_When_clause_eParserRuleCall_0_4(parent, this, 4, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// equality_equation_rule
+protected class Equation_rule_Equality_equation_ruleParserRuleCall_0_0 extends UnassignedTextToken {
+
+	public Equation_rule_Equality_equation_ruleParserRuleCall_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getEquality_equation_ruleParserRuleCall_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// conditional_equation_rule_e
+protected class Equation_rule_Conditional_equation_rule_eParserRuleCall_0_1 extends RuleCallToken {
+	
+	public Equation_rule_Conditional_equation_rule_eParserRuleCall_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getConditional_equation_rule_eParserRuleCall_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Conditional_equation_rule_e_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// for_clause_e
+protected class Equation_rule_For_clause_eParserRuleCall_0_2 extends RuleCallToken {
+	
+	public Equation_rule_For_clause_eParserRuleCall_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getFor_clause_eParserRuleCall_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(For_clause_e_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getFor_clause_eRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// connect_clause
+protected class Equation_rule_Connect_clauseParserRuleCall_0_3 extends UnassignedTextToken {
+
+	public Equation_rule_Connect_clauseParserRuleCall_0_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getConnect_clauseParserRuleCall_0_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// when_clause_e      
+// 	//| FAILURE LPAR equation_rule RPAR
+// 	 //| EQUALITY LPAR equation_rule RPAR
+protected class Equation_rule_When_clause_eParserRuleCall_0_4 extends RuleCallToken {
+	
+	public Equation_rule_When_clause_eParserRuleCall_0_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getWhen_clause_eParserRuleCall_0_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(When_clause_e_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getWhen_clause_eRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+// comment=comment
+protected class Equation_rule_CommentAssignment_1 extends AssignmentToken  {
+	
+	public Equation_rule_CommentAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEquation_ruleAccess().getCommentAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEquation_ruleAccess().getCommentCommentParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Equation_rule_Alternatives_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule equation_rule ****************/
+
+
+/************ begin Rule algorithm ****************
+ *
+ * algorithm:
+ *   (assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+ *   when_clause_a|"break"|"return") comment=comment; 
+ * 
+ *   
+ * 	  
+ * 	  
+ * 	  
+ * 	  
+ * 	  
+ * 	  
+ * 	  
+ * 	//| FAILURE LPAR algorithm RPAR
+ * 	 //| EQUALITY LPAR algorithm RPAR
+ *
+ **/
+
+// (assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+// when_clause_a|"break"|"return") comment=comment 
+// 	  
+// 	  
+// 	  
+// 	  
+// 	  
+// 	  
+// 	  
+// 	//| FAILURE LPAR algorithm RPAR
+// 	 //| EQUALITY LPAR algorithm RPAR
+protected class Algorithm_Group extends GroupToken {
+	
+	public Algorithm_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_CommentAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getAlgorithmRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+// when_clause_a|"break"|"return" 
+// 	  
+// 	  
+// 	  
+// 	  
+// 	  
+// 	  
+// 	  
+// 	//| FAILURE LPAR algorithm RPAR
+// 	 //| EQUALITY LPAR algorithm RPAR
+protected class Algorithm_Alternatives_0 extends AlternativesToken {
+
+	public Algorithm_Alternatives_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getAlternatives_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_Assign_clause_aParserRuleCall_0_0(parent, this, 0, inst);
+			case 1: return new Algorithm_Conditional_equation_rule_aParserRuleCall_0_1(parent, this, 1, inst);
+			case 2: return new Algorithm_For_clause_aParserRuleCall_0_2(parent, this, 2, inst);
+			case 3: return new Algorithm_While_clauseParserRuleCall_0_3(parent, this, 3, inst);
+			case 4: return new Algorithm_When_clause_aParserRuleCall_0_4(parent, this, 4, inst);
+			case 5: return new Algorithm_BreakKeyword_0_5(parent, this, 5, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// assign_clause_a
+protected class Algorithm_Assign_clause_aParserRuleCall_0_0 extends UnassignedTextToken {
+
+	public Algorithm_Assign_clause_aParserRuleCall_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getAssign_clause_aParserRuleCall_0_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// conditional_equation_rule_a
+protected class Algorithm_Conditional_equation_rule_aParserRuleCall_0_1 extends RuleCallToken {
+	
+	public Algorithm_Conditional_equation_rule_aParserRuleCall_0_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getConditional_equation_rule_aParserRuleCall_0_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Conditional_equation_rule_a_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// for_clause_a
+protected class Algorithm_For_clause_aParserRuleCall_0_2 extends RuleCallToken {
+	
+	public Algorithm_For_clause_aParserRuleCall_0_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getFor_clause_aParserRuleCall_0_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(For_clause_a_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getFor_clause_aRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// while_clause
+protected class Algorithm_While_clauseParserRuleCall_0_3 extends RuleCallToken {
+	
+	public Algorithm_While_clauseParserRuleCall_0_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getWhile_clauseParserRuleCall_0_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(While_clause_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getWhile_clauseRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// when_clause_a
+protected class Algorithm_When_clause_aParserRuleCall_0_4 extends RuleCallToken {
+	
+	public Algorithm_When_clause_aParserRuleCall_0_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getWhen_clause_aParserRuleCall_0_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(When_clause_a_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getWhen_clause_aRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// "break"
+protected class Algorithm_BreakKeyword_0_5 extends KeywordToken  {
+	
+	public Algorithm_BreakKeyword_0_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getBreakKeyword_0_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+
+// comment=comment
+protected class Algorithm_CommentAssignment_1 extends AssignmentToken  {
+	
+	public Algorithm_CommentAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAlgorithmAccess().getCommentAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("comment",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("comment");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getAlgorithmAccess().getCommentCommentParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Algorithm_Alternatives_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule algorithm ****************/
+
+
+
+
+/************ begin Rule conditional_equation_rule_e ****************
+ *
+ * conditional_equation_rule_e returns ConditionalEquationRule:
+ *   "if" expression "then" (thenEquationClauses+=equation_rule SEMICOLON)* elseifClauses
+ *   +=equation_rule_elseif* ("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+ *   "end" "if";
+ *
+ **/
+
+// "if" expression "then" (thenEquationClauses+=equation_rule SEMICOLON)* elseifClauses
+// +=equation_rule_elseif* ("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+// "end" "if"
+protected class Conditional_equation_rule_e_Group extends GroupToken {
+	
+	public Conditional_equation_rule_e_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_IfKeyword_7(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "if"
+protected class Conditional_equation_rule_e_IfKeyword_0 extends KeywordToken  {
+	
+	public Conditional_equation_rule_e_IfKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getIfKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// expression
+protected class Conditional_equation_rule_e_ExpressionParserRuleCall_1 extends UnassignedTextToken {
+
+	public Conditional_equation_rule_e_ExpressionParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getExpressionParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_IfKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "then"
+protected class Conditional_equation_rule_e_ThenKeyword_2 extends KeywordToken  {
+	
+	public Conditional_equation_rule_e_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_ExpressionParserRuleCall_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenEquationClauses+=equation_rule SEMICOLON)*
+protected class Conditional_equation_rule_e_Group_3 extends GroupToken {
+	
+	public Conditional_equation_rule_e_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenEquationClauses+=equation_rule
+protected class Conditional_equation_rule_e_ThenEquationClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_e_ThenEquationClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getThenEquationClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenEquationClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenEquationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConditional_equation_rule_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Conditional_equation_rule_e_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Conditional_equation_rule_e_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public Conditional_equation_rule_e_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_ThenEquationClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// elseifClauses+=equation_rule_elseif*
+protected class Conditional_equation_rule_e_ElseifClausesAssignment_4 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_e_ElseifClausesAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getElseifClausesAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_elseif_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elseifClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elseifClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_rule_elseifRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConditional_equation_rule_eAccess().getElseifClausesEquation_rule_elseifParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_ElseifClausesAssignment_4(parent, next, actIndex, consumed);
+			case 1: return new Conditional_equation_rule_e_Group_3(parent, next, actIndex, consumed);
+			case 2: return new Conditional_equation_rule_e_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+protected class Conditional_equation_rule_e_Group_5 extends GroupToken {
+	
+	public Conditional_equation_rule_e_Group_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getGroup_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_Group_5_1(parent, this, 0, inst);
+			case 1: return new Conditional_equation_rule_e_ElseKeyword_5_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "else"
+protected class Conditional_equation_rule_e_ElseKeyword_5_0 extends KeywordToken  {
+	
+	public Conditional_equation_rule_e_ElseKeyword_5_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getElseKeyword_5_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_ElseifClausesAssignment_4(parent, this, 0, inst);
+			case 1: return new Conditional_equation_rule_e_Group_3(parent, this, 1, inst);
+			case 2: return new Conditional_equation_rule_e_ThenKeyword_2(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (elseEquationClauses+=equation_rule SEMICOLON)*
+protected class Conditional_equation_rule_e_Group_5_1 extends GroupToken {
+	
+	public Conditional_equation_rule_e_Group_5_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getGroup_5_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_SEMICOLONTerminalRuleCall_5_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elseEquationClauses+=equation_rule
+protected class Conditional_equation_rule_e_ElseEquationClausesAssignment_5_1_0 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_e_ElseEquationClausesAssignment_5_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getElseEquationClausesAssignment_5_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elseEquationClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elseEquationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConditional_equation_rule_eAccess().getElseEquationClausesEquation_ruleParserRuleCall_5_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_Group_5_1(parent, next, actIndex, consumed);
+			case 1: return new Conditional_equation_rule_e_ElseKeyword_5_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Conditional_equation_rule_e_SEMICOLONTerminalRuleCall_5_1_1 extends UnassignedTextToken {
+
+	public Conditional_equation_rule_e_SEMICOLONTerminalRuleCall_5_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getSEMICOLONTerminalRuleCall_5_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_ElseEquationClausesAssignment_5_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+// "end"
+protected class Conditional_equation_rule_e_EndKeyword_6 extends KeywordToken  {
+	
+	public Conditional_equation_rule_e_EndKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getEndKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_Group_5(parent, this, 0, inst);
+			case 1: return new Conditional_equation_rule_e_ElseifClausesAssignment_4(parent, this, 1, inst);
+			case 2: return new Conditional_equation_rule_e_Group_3(parent, this, 2, inst);
+			case 3: return new Conditional_equation_rule_e_ThenKeyword_2(parent, this, 3, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "if"
+protected class Conditional_equation_rule_e_IfKeyword_7 extends KeywordToken  {
+	
+	public Conditional_equation_rule_e_IfKeyword_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_eAccess().getIfKeyword_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_e_EndKeyword_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule conditional_equation_rule_e ****************/
+
+
+/************ begin Rule conditional_equation_rule_a ****************
+ *
+ * conditional_equation_rule_a returns ConditionAlgorithmRule:
+ *   "if" condition=expression "then" (thenAlgorithmClauses+=algorithm SEMICOLON)*
+ *   elseifClauses+=algorithm_elseif* ("else" (elseAlgotithmClauses+=algorithm SEMICOLON
+ *   )*)? "end" "if";
+ *
+ **/
+
+// "if" condition=expression "then" (thenAlgorithmClauses+=algorithm SEMICOLON)*
+// elseifClauses+=algorithm_elseif* ("else" (elseAlgotithmClauses+=algorithm SEMICOLON
+// )*)? "end" "if"
+protected class Conditional_equation_rule_a_Group extends GroupToken {
+	
+	public Conditional_equation_rule_a_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_IfKeyword_7(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "if"
+protected class Conditional_equation_rule_a_IfKeyword_0 extends KeywordToken  {
+	
+	public Conditional_equation_rule_a_IfKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getIfKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class Conditional_equation_rule_a_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_a_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_IfKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getConditional_equation_rule_aAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class Conditional_equation_rule_a_ThenKeyword_2 extends KeywordToken  {
+	
+	public Conditional_equation_rule_a_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenAlgorithmClauses+=algorithm SEMICOLON)*
+protected class Conditional_equation_rule_a_Group_3 extends GroupToken {
+	
+	public Conditional_equation_rule_a_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenAlgorithmClauses+=algorithm
+protected class Conditional_equation_rule_a_ThenAlgorithmClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_a_ThenAlgorithmClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getThenAlgorithmClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenAlgorithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenAlgorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithmRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConditional_equation_rule_aAccess().getThenAlgorithmClausesAlgorithmParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Conditional_equation_rule_a_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Conditional_equation_rule_a_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public Conditional_equation_rule_a_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_ThenAlgorithmClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// elseifClauses+=algorithm_elseif*
+protected class Conditional_equation_rule_a_ElseifClausesAssignment_4 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_a_ElseifClausesAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getElseifClausesAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_elseif_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elseifClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elseifClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithm_elseifRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConditional_equation_rule_aAccess().getElseifClausesAlgorithm_elseifParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_ElseifClausesAssignment_4(parent, next, actIndex, consumed);
+			case 1: return new Conditional_equation_rule_a_Group_3(parent, next, actIndex, consumed);
+			case 2: return new Conditional_equation_rule_a_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("else" (elseAlgotithmClauses+=algorithm SEMICOLON)*)?
+protected class Conditional_equation_rule_a_Group_5 extends GroupToken {
+	
+	public Conditional_equation_rule_a_Group_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getGroup_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_Group_5_1(parent, this, 0, inst);
+			case 1: return new Conditional_equation_rule_a_ElseKeyword_5_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "else"
+protected class Conditional_equation_rule_a_ElseKeyword_5_0 extends KeywordToken  {
+	
+	public Conditional_equation_rule_a_ElseKeyword_5_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getElseKeyword_5_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_ElseifClausesAssignment_4(parent, this, 0, inst);
+			case 1: return new Conditional_equation_rule_a_Group_3(parent, this, 1, inst);
+			case 2: return new Conditional_equation_rule_a_ThenKeyword_2(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (elseAlgotithmClauses+=algorithm SEMICOLON)*
+protected class Conditional_equation_rule_a_Group_5_1 extends GroupToken {
+	
+	public Conditional_equation_rule_a_Group_5_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getGroup_5_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_SEMICOLONTerminalRuleCall_5_1_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// elseAlgotithmClauses+=algorithm
+protected class Conditional_equation_rule_a_ElseAlgotithmClausesAssignment_5_1_0 extends AssignmentToken  {
+	
+	public Conditional_equation_rule_a_ElseAlgotithmClausesAssignment_5_1_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getElseAlgotithmClausesAssignment_5_1_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elseAlgotithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elseAlgotithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithmRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getConditional_equation_rule_aAccess().getElseAlgotithmClausesAlgorithmParserRuleCall_5_1_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_Group_5_1(parent, next, actIndex, consumed);
+			case 1: return new Conditional_equation_rule_a_ElseKeyword_5_0(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Conditional_equation_rule_a_SEMICOLONTerminalRuleCall_5_1_1 extends UnassignedTextToken {
+
+	public Conditional_equation_rule_a_SEMICOLONTerminalRuleCall_5_1_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getSEMICOLONTerminalRuleCall_5_1_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_ElseAlgotithmClausesAssignment_5_1_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+// "end"
+protected class Conditional_equation_rule_a_EndKeyword_6 extends KeywordToken  {
+	
+	public Conditional_equation_rule_a_EndKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getEndKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_Group_5(parent, this, 0, inst);
+			case 1: return new Conditional_equation_rule_a_ElseifClausesAssignment_4(parent, this, 1, inst);
+			case 2: return new Conditional_equation_rule_a_Group_3(parent, this, 2, inst);
+			case 3: return new Conditional_equation_rule_a_ThenKeyword_2(parent, this, 3, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "if"
+protected class Conditional_equation_rule_a_IfKeyword_7 extends KeywordToken  {
+	
+	public Conditional_equation_rule_a_IfKeyword_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getConditional_equation_rule_aAccess().getIfKeyword_7();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Conditional_equation_rule_a_EndKeyword_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule conditional_equation_rule_a ****************/
+
+
+/************ begin Rule for_clause_e ****************
+ *
+ * for_clause_e returns ForEquationClause:
+ *   "for" forIndices=for_indices "loop" (equationClauses+=equation_rule SEMICOLON)* "end"
+ *   "for";
+ *
+ **/
+
+// "for" forIndices=for_indices "loop" (equationClauses+=equation_rule SEMICOLON)* "end"
+// "for"
+protected class For_clause_e_Group extends GroupToken {
+	
+	public For_clause_e_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_ForKeyword_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getFor_clause_eRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "for"
+protected class For_clause_e_ForKeyword_0 extends KeywordToken  {
+	
+	public For_clause_e_ForKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getForKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// forIndices=for_indices
+protected class For_clause_e_ForIndicesAssignment_1 extends AssignmentToken  {
+	
+	public For_clause_e_ForIndicesAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getForIndicesAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_ForKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("forIndices",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("forIndices");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getFor_clause_eAccess().getForIndicesFor_indicesParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "loop"
+protected class For_clause_e_LoopKeyword_2 extends KeywordToken  {
+	
+	public For_clause_e_LoopKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getLoopKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_ForIndicesAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (equationClauses+=equation_rule SEMICOLON)*
+protected class For_clause_e_Group_3 extends GroupToken {
+	
+	public For_clause_e_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// equationClauses+=equation_rule
+protected class For_clause_e_EquationClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public For_clause_e_EquationClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getEquationClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("equationClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("equationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getFor_clause_eAccess().getEquationClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new For_clause_e_Group_3(parent, next, actIndex, consumed);
+			case 1: return new For_clause_e_LoopKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class For_clause_e_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public For_clause_e_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_EquationClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// "end"
+protected class For_clause_e_EndKeyword_4 extends KeywordToken  {
+	
+	public For_clause_e_EndKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getEndKeyword_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_Group_3(parent, this, 0, inst);
+			case 1: return new For_clause_e_LoopKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "for"
+protected class For_clause_e_ForKeyword_5 extends KeywordToken  {
+	
+	public For_clause_e_ForKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_eAccess().getForKeyword_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_e_EndKeyword_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule for_clause_e ****************/
+
+
+/************ begin Rule for_clause_a ****************
+ *
+ * for_clause_a returns ForAlgorithmClause:
+ *   "for" forIndices=for_indices "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+ *   "for";
+ *
+ **/
+
+// "for" forIndices=for_indices "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+// "for"
+protected class For_clause_a_Group extends GroupToken {
+	
+	public For_clause_a_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_ForKeyword_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getFor_clause_aRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "for"
+protected class For_clause_a_ForKeyword_0 extends KeywordToken  {
+	
+	public For_clause_a_ForKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getForKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// forIndices=for_indices
+protected class For_clause_a_ForIndicesAssignment_1 extends AssignmentToken  {
+	
+	public For_clause_a_ForIndicesAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getForIndicesAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_ForKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("forIndices",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("forIndices");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getFor_clause_aAccess().getForIndicesFor_indicesParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "loop"
+protected class For_clause_a_LoopKeyword_2 extends KeywordToken  {
+	
+	public For_clause_a_LoopKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getLoopKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_ForIndicesAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (algorithmClauses+=algorithm SEMICOLON)*
+protected class For_clause_a_Group_3 extends GroupToken {
+	
+	public For_clause_a_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// algorithmClauses+=algorithm
+protected class For_clause_a_AlgorithmClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public For_clause_a_AlgorithmClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getAlgorithmClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("algorithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("algorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithmRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getFor_clause_aAccess().getAlgorithmClausesAlgorithmParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new For_clause_a_Group_3(parent, next, actIndex, consumed);
+			case 1: return new For_clause_a_LoopKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class For_clause_a_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public For_clause_a_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_AlgorithmClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// "end"
+protected class For_clause_a_EndKeyword_4 extends KeywordToken  {
+	
+	public For_clause_a_EndKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getEndKeyword_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_Group_3(parent, this, 0, inst);
+			case 1: return new For_clause_a_LoopKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "for"
+protected class For_clause_a_ForKeyword_5 extends KeywordToken  {
+	
+	public For_clause_a_ForKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getFor_clause_aAccess().getForKeyword_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new For_clause_a_EndKeyword_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule for_clause_a ****************/
+
+
+/************ begin Rule while_clause ****************
+ *
+ * while_clause returns WhileClause:
+ *   "while" condition=expression "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+ *   "while";
+ *
+ **/
+
+// "while" condition=expression "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+// "while"
+protected class While_clause_Group extends GroupToken {
+	
+	public While_clause_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_WhileKeyword_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getWhile_clauseRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "while"
+protected class While_clause_WhileKeyword_0 extends KeywordToken  {
+	
+	public While_clause_WhileKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getWhileKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class While_clause_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public While_clause_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_WhileKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getWhile_clauseAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "loop"
+protected class While_clause_LoopKeyword_2 extends KeywordToken  {
+	
+	public While_clause_LoopKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getLoopKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (algorithmClauses+=algorithm SEMICOLON)*
+protected class While_clause_Group_3 extends GroupToken {
+	
+	public While_clause_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// algorithmClauses+=algorithm
+protected class While_clause_AlgorithmClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public While_clause_AlgorithmClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getAlgorithmClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("algorithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("algorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAlgorithmRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getWhile_clauseAccess().getAlgorithmClausesAlgorithmParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new While_clause_Group_3(parent, next, actIndex, consumed);
+			case 1: return new While_clause_LoopKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class While_clause_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public While_clause_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_AlgorithmClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// "end"
+protected class While_clause_EndKeyword_4 extends KeywordToken  {
+	
+	public While_clause_EndKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getEndKeyword_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_Group_3(parent, this, 0, inst);
+			case 1: return new While_clause_LoopKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "while"
+protected class While_clause_WhileKeyword_5 extends KeywordToken  {
+	
+	public While_clause_WhileKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhile_clauseAccess().getWhileKeyword_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new While_clause_EndKeyword_4(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule while_clause ****************/
+
+
+/************ begin Rule when_clause_e ****************
+ *
+ * when_clause_e:
+ *   "when" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+ *   elseWhenClauses+=else_when_e* "end" "when";
+ *
+ **/
+
+// "when" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+// elseWhenClauses+=else_when_e* "end" "when"
+protected class When_clause_e_Group extends GroupToken {
+	
+	public When_clause_e_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_WhenKeyword_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getWhen_clause_eRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "when"
+protected class When_clause_e_WhenKeyword_0 extends KeywordToken  {
+	
+	public When_clause_e_WhenKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getWhenKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class When_clause_e_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public When_clause_e_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_WhenKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getWhen_clause_eAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class When_clause_e_ThenKeyword_2 extends KeywordToken  {
+	
+	public When_clause_e_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenEquationClauses+=equation_rule SEMICOLON)*
+protected class When_clause_e_Group_3 extends GroupToken {
+	
+	public When_clause_e_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenEquationClauses+=equation_rule
+protected class When_clause_e_ThenEquationClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public When_clause_e_ThenEquationClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getThenEquationClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenEquationClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenEquationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getWhen_clause_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new When_clause_e_Group_3(parent, next, actIndex, consumed);
+			case 1: return new When_clause_e_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class When_clause_e_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public When_clause_e_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_ThenEquationClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// elseWhenClauses+=else_when_e*
+protected class When_clause_e_ElseWhenClausesAssignment_4 extends AssignmentToken  {
+	
+	public When_clause_e_ElseWhenClausesAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getElseWhenClausesAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_e_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elseWhenClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elseWhenClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getElse_when_eRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getWhen_clause_eAccess().getElseWhenClausesElse_when_eParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new When_clause_e_ElseWhenClausesAssignment_4(parent, next, actIndex, consumed);
+			case 1: return new When_clause_e_Group_3(parent, next, actIndex, consumed);
+			case 2: return new When_clause_e_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "end"
+protected class When_clause_e_EndKeyword_5 extends KeywordToken  {
+	
+	public When_clause_e_EndKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getEndKeyword_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_ElseWhenClausesAssignment_4(parent, this, 0, inst);
+			case 1: return new When_clause_e_Group_3(parent, this, 1, inst);
+			case 2: return new When_clause_e_ThenKeyword_2(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "when"
+protected class When_clause_e_WhenKeyword_6 extends KeywordToken  {
+	
+	public When_clause_e_WhenKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_eAccess().getWhenKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_e_EndKeyword_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule when_clause_e ****************/
+
+
+/************ begin Rule else_when_e ****************
+ *
+ * else_when_e:
+ *   "elsewhen" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON
+ *   )*;
+ *
+ **/
+
+// "elsewhen" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON
+// )*
+protected class Else_when_e_Group extends GroupToken {
+	
+	public Else_when_e_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_e_Group_3(parent, this, 0, inst);
+			case 1: return new Else_when_e_ThenKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElse_when_eRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "elsewhen"
+protected class Else_when_e_ElsewhenKeyword_0 extends KeywordToken  {
+	
+	public Else_when_e_ElsewhenKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getElsewhenKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class Else_when_e_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public Else_when_e_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_e_ElsewhenKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getElse_when_eAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class Else_when_e_ThenKeyword_2 extends KeywordToken  {
+	
+	public Else_when_e_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_e_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenEquationClauses+=equation_rule SEMICOLON)*
+protected class Else_when_e_Group_3 extends GroupToken {
+	
+	public Else_when_e_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_e_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenEquationClauses+=equation_rule
+protected class Else_when_e_ThenEquationClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public Else_when_e_ThenEquationClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getThenEquationClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenEquationClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenEquationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElse_when_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Else_when_e_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Else_when_e_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Else_when_e_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public Else_when_e_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElse_when_eAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_e_ThenEquationClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule else_when_e ****************/
+
+
+/************ begin Rule when_clause_a ****************
+ *
+ * when_clause_a:
+ *   "when" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+ *   elseWhenClauses+=else_when_a* "end" "when";
+ *
+ **/
+
+// "when" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+// elseWhenClauses+=else_when_a* "end" "when"
+protected class When_clause_a_Group extends GroupToken {
+	
+	public When_clause_a_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_WhenKeyword_6(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getWhen_clause_aRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "when"
+protected class When_clause_a_WhenKeyword_0 extends KeywordToken  {
+	
+	public When_clause_a_WhenKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getWhenKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class When_clause_a_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public When_clause_a_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_WhenKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getWhen_clause_aAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class When_clause_a_ThenKeyword_2 extends KeywordToken  {
+	
+	public When_clause_a_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+protected class When_clause_a_Group_3 extends GroupToken {
+	
+	public When_clause_a_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenAlgorithmClauses+=equation_rule
+protected class When_clause_a_ThenAlgorithmClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public When_clause_a_ThenAlgorithmClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getThenAlgorithmClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenAlgorithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenAlgorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getWhen_clause_aAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new When_clause_a_Group_3(parent, next, actIndex, consumed);
+			case 1: return new When_clause_a_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class When_clause_a_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public When_clause_a_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_ThenAlgorithmClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+// elseWhenClauses+=else_when_a*
+protected class When_clause_a_ElseWhenClausesAssignment_4 extends AssignmentToken  {
+	
+	public When_clause_a_ElseWhenClausesAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getElseWhenClausesAssignment_4();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_a_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("elseWhenClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("elseWhenClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getElse_when_aRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getWhen_clause_aAccess().getElseWhenClausesElse_when_aParserRuleCall_4_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new When_clause_a_ElseWhenClausesAssignment_4(parent, next, actIndex, consumed);
+			case 1: return new When_clause_a_Group_3(parent, next, actIndex, consumed);
+			case 2: return new When_clause_a_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// "end"
+protected class When_clause_a_EndKeyword_5 extends KeywordToken  {
+	
+	public When_clause_a_EndKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getEndKeyword_5();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_ElseWhenClausesAssignment_4(parent, this, 0, inst);
+			case 1: return new When_clause_a_Group_3(parent, this, 1, inst);
+			case 2: return new When_clause_a_ThenKeyword_2(parent, this, 2, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// "when"
+protected class When_clause_a_WhenKeyword_6 extends KeywordToken  {
+	
+	public When_clause_a_WhenKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getWhen_clause_aAccess().getWhenKeyword_6();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new When_clause_a_EndKeyword_5(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+/************ end Rule when_clause_a ****************/
+
+
+/************ begin Rule else_when_a ****************
+ *
+ * else_when_a:
+ *   "elsewhen" condition=expression "then" (thenAlgorithmClauses+=equation_rule
+ *   SEMICOLON)*;
+ *
+ **/
+
+// "elsewhen" condition=expression "then" (thenAlgorithmClauses+=equation_rule
+// SEMICOLON)*
+protected class Else_when_a_Group extends GroupToken {
+	
+	public Else_when_a_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_a_Group_3(parent, this, 0, inst);
+			case 1: return new Else_when_a_ThenKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getElse_when_aRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "elsewhen"
+protected class Else_when_a_ElsewhenKeyword_0 extends KeywordToken  {
+	
+	public Else_when_a_ElsewhenKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getElsewhenKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class Else_when_a_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public Else_when_a_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_a_ElsewhenKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getElse_when_aAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class Else_when_a_ThenKeyword_2 extends KeywordToken  {
+	
+	public Else_when_a_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_a_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+protected class Else_when_a_Group_3 extends GroupToken {
+	
+	public Else_when_a_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_a_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenAlgorithmClauses+=equation_rule
+protected class Else_when_a_ThenAlgorithmClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public Else_when_a_ThenAlgorithmClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getThenAlgorithmClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenAlgorithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenAlgorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getElse_when_aAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Else_when_a_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Else_when_a_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Else_when_a_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public Else_when_a_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getElse_when_aAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Else_when_a_ThenAlgorithmClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule else_when_a ****************/
+
+
+/************ begin Rule equation_rule_elseif ****************
+ *
+ * equation_rule_elseif:
+ *   "elseif" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+ * ;
+ *
+ **/
+
+// "elseif" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+protected class Equation_rule_elseif_Group extends GroupToken {
+	
+	public Equation_rule_elseif_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_elseif_Group_3(parent, this, 0, inst);
+			case 1: return new Equation_rule_elseif_ThenKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getEquation_rule_elseifRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "elseif"
+protected class Equation_rule_elseif_ElseifKeyword_0 extends KeywordToken  {
+	
+	public Equation_rule_elseif_ElseifKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getElseifKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class Equation_rule_elseif_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public Equation_rule_elseif_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_elseif_ElseifKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getEquation_rule_elseifAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class Equation_rule_elseif_ThenKeyword_2 extends KeywordToken  {
+	
+	public Equation_rule_elseif_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_elseif_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenEquationClauses+=equation_rule SEMICOLON)*
+protected class Equation_rule_elseif_Group_3 extends GroupToken {
+	
+	public Equation_rule_elseif_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_elseif_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenEquationClauses+=equation_rule
+protected class Equation_rule_elseif_ThenEquationClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public Equation_rule_elseif_ThenEquationClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getThenEquationClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenEquationClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenEquationClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getEquation_rule_elseifAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Equation_rule_elseif_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Equation_rule_elseif_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Equation_rule_elseif_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public Equation_rule_elseif_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getEquation_rule_elseifAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_elseif_ThenEquationClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule equation_rule_elseif ****************/
+
+
+/************ begin Rule algorithm_elseif ****************
+ *
+ * algorithm_elseif:
+ *   "elseif" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)
+ *   *;
+ *
+ **/
+
+// "elseif" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)
+// *
+protected class Algorithm_elseif_Group extends GroupToken {
+	
+	public Algorithm_elseif_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_elseif_Group_3(parent, this, 0, inst);
+			case 1: return new Algorithm_elseif_ThenKeyword_2(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getAlgorithm_elseifRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "elseif"
+protected class Algorithm_elseif_ElseifKeyword_0 extends KeywordToken  {
+	
+	public Algorithm_elseif_ElseifKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getElseifKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// condition=expression
+protected class Algorithm_elseif_ConditionAssignment_1 extends AssignmentToken  {
+	
+	public Algorithm_elseif_ConditionAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getConditionAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_elseif_ElseifKeyword_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("condition",true)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("condition");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getAlgorithm_elseifAccess().getConditionExpressionParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "then"
+protected class Algorithm_elseif_ThenKeyword_2 extends KeywordToken  {
+	
+	public Algorithm_elseif_ThenKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getThenKeyword_2();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_elseif_ConditionAssignment_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+protected class Algorithm_elseif_Group_3 extends GroupToken {
+	
+	public Algorithm_elseif_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getGroup_3();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_elseif_SEMICOLONTerminalRuleCall_3_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+// thenAlgorithmClauses+=equation_rule
+protected class Algorithm_elseif_ThenAlgorithmClausesAssignment_3_0 extends AssignmentToken  {
+	
+	public Algorithm_elseif_ThenAlgorithmClausesAssignment_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getThenAlgorithmClausesAssignment_3_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Equation_rule_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("thenAlgorithmClauses",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("thenAlgorithmClauses");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getEquation_ruleRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getAlgorithm_elseifAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Algorithm_elseif_Group_3(parent, next, actIndex, consumed);
+			case 1: return new Algorithm_elseif_ThenKeyword_2(parent, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// SEMICOLON
+protected class Algorithm_elseif_SEMICOLONTerminalRuleCall_3_1 extends UnassignedTextToken {
+
+	public Algorithm_elseif_SEMICOLONTerminalRuleCall_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAlgorithm_elseifAccess().getSEMICOLONTerminalRuleCall_3_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Algorithm_elseif_ThenAlgorithmClausesAssignment_3_0(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+}
+
+
+
+/************ end Rule algorithm_elseif ****************/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/************ begin Rule comment ****************
+ *
+ * comment returns Comment:
+ *   string=string_comment? annotation=annotation?;
+ *
+ **/
+
+// string=string_comment? annotation=annotation?
+protected class Comment_Group extends GroupToken {
+	
+	public Comment_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getCommentAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Comment_AnnotationAssignment_1(parent, this, 0, inst);
+			case 1: return new Comment_StringAssignment_0(parent, this, 1, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getCommentRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// string=string_comment?
+protected class Comment_StringAssignment_0 extends AssignmentToken  {
+	
+	public Comment_StringAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCommentAccess().getStringAssignment_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("string",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("string");
+		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
+			type = AssignmentType.DRC;
+			element = grammarAccess.getCommentAccess().getStringString_commentParserRuleCall_0_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// annotation=annotation?
+protected class Comment_AnnotationAssignment_1 extends AssignmentToken  {
+	
+	public Comment_AnnotationAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCommentAccess().getAnnotationAssignment_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if((value = current.getConsumable("annotation",false)) == null) return null;
+		IInstanceDescription obj = current.cloneAndConsume("annotation");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IInstanceDescription param = getDescr((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) {
+				type = AssignmentType.PRC;
+				element = grammarAccess.getCommentAccess().getAnnotationAnnotationParserRuleCall_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Comment_StringAssignment_0(parent, next, actIndex, consumed);
+			default: return parent.createParentFollower(next, actIndex , index - 1, consumed);
+		}	
+	}	
+}
+
+
+/************ end Rule comment ****************/
+
+
+
+/************ begin Rule annotation ****************
+ *
+ * annotation returns Annotation:
+ *   "annotation" class_modification; 
+ * 
+ *     
+ * 	  
+ * 	
+ * 
+ * 
+ * 
+ * / *------------------------------------------------------------------
+ *  * LEXER RULES
+ *  *------------------------------------------------------------------* /
+ * 
+ * / * Keywords * / 
+ * 
+ * //terminal T_ALGORITHM	: 'algorithm'	;
+ * //terminal T_AND		: 'and'		;
+ * //terminal T_ANNOTATION	: 'annotation'	;
+ * //terminal BLOCK		: 'block'	;
+ * //terminal CODE		: 'Code'	;
+ * //terminal   CLASS		: 'class'	;
+ * / *
+ * terminal CONNECT	: 'connect'	;
+ * terminal CONNECTOR	: 'connector'	;
+ * terminal   CONSTANT	: 'constant'	;
+ * terminal   DISCRETE	: 'discrete'	;
+ * terminal   DER           : 'der' 	;
+ * terminal   EACH		: 'each'	;
+ * terminal   ELSE		: 'else'	;
+ * terminal   ELSEIF	: 'elseif'	;
+ * terminal   ELSEWHEN	: 'elsewhen'	;
+ * terminal   T_END		: 'end'		;
+ * terminal   ENUMERATION	: 'enumeration'	;
+ * terminal   EQUATION	: 'equation'	;
+ * terminal   ENCAPSULATED	: 'encapsulated';
+ * terminal   EXPANDABLE	: 'expandable'  ;
+ * terminal   EXTENDS	: 'extends'     ;
+ * terminal   CONSTRAINEDBY : 'constrainedby' ;
+ * terminal   EXTERNAL	: 'external'	;
+ * terminal   T_FALSE	: 'false'	;
+ * //terminal   FINAL		: 'final'	;
+ * terminal   FLOW		: 'flow'	;
+ * terminal   FOR		: 'for'		;
+ * terminal   FUNCTION	: 'function'	;
+ * terminal   IF		: 'if'		;
+ * terminal   IMPORT	: 'import'	;
+ * terminal   T_IN		: 'in'		;
+ * terminal   INITIAL	: 'initial'	;
+ * terminal   INNER		: 'inner'	;
+ * terminal   T_INPUT	: 'input'	;
+ * terminal   LOOP		: 'loop'	;
+ * terminal   MODEL		: 'model'	;
+ * terminal   T_NOT		: 'not'		;
+ * terminal   T_OUTER	: 'outer'	;
+ * terminal   OVERLOAD	: 'overload'	;
+ * terminal   T_OR		: 'or'		;
+ * terminal   T_OUTPUT	: 'output'	;
+ * terminal   PACKAGE	: 'package'	;
+ * terminal   PARAMETER	: 'parameter'	;
+ * terminal   PARTIAL	: 'partial'	;
+ * terminal   PROTECTED	: 'protected'	;
+ * terminal   PUBLIC	: 'public'	;
+ * terminal   RECORD	: 'record'	;
+ * terminal   REDECLARE	: 'redeclare'	;
+ * terminal   REPLACEABLE	: 'replaceable'	;
+ * terminal   RESULTS	: 'results'	;
+ * terminal   THEN		: 'then'	;
+ * terminal   T_TRUE	: 'true'	;
+ * terminal   TYPE		: 'type'	;
+ * terminal   WHEN		: 'when'	;
+ * terminal   WHILE		: 'while'	;
+ * terminal   WITHIN	: 'within' 	;
+ * terminal   RETURN	: 'return'  ;
+ * terminal   BREAK		: 'break'	;
+ * terminal   STREAM	: 'stream'	; / * for Modelica 3.1 stream connectors * /	
+ * 
+ *   // ---------
+ *    // Operators
+ *    // ---------
+ *
+ **/
+
+// "annotation" class_modification
+protected class Annotation_Group extends GroupToken {
+	
+	public Annotation_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Group getGrammarElement() {
+		return grammarAccess.getAnnotationAccess().getGroup();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_Class_modificationParserRuleCall_1(parent, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	public IInstanceDescription tryConsume() {
+		if(!current.isInstanceOf(grammarAccess.getAnnotationRule().getType().getClassifier())) return null;
+		return tryConsumeVal();
+	}
+}
+
+// "annotation"
+protected class Annotation_AnnotationKeyword_0 extends KeywordToken  {
+	
+	public Annotation_AnnotationKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAnnotationAccess().getAnnotationKeyword_0();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			default: return parent.createParentFollower(this, index, index, inst);
+		}	
+	}	
+		
+}
+
+// class_modification
+protected class Annotation_Class_modificationParserRuleCall_1 extends RuleCallToken {
+	
+	public Annotation_Class_modificationParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
+		super(parent, next, no, current);
+	}
+	
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getAnnotationAccess().getClass_modificationParserRuleCall_1();
+	}
+
+	public AbstractToken createFollower(int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Class_modification_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}	
+		
+	protected IInstanceDescription tryConsumeVal() {
+		if(checkForRecursion(Class_modification_Group.class, current)) return null;
+		if(!current.isInstanceOf(grammarAccess.getClass_modificationRule().getType().getClassifier())) return null;
+		return current;
+	}
+	
+	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
+		switch(index) {
+			case 0: return new Annotation_AnnotationKeyword_0(parent, next, actIndex, inst);
+			default: return null;
+		}	
+	}	
+}
+
+
+/************ end Rule annotation ****************/
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/ModelicaBaseAntlrTokenFileProvider.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/ModelicaBaseAntlrTokenFileProvider.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/ModelicaBaseAntlrTokenFileProvider.java	(revision 540)
@@ -0,0 +1,15 @@
+/*
+* generated by Xtext
+*/
+package org.modelica.xtext.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class ModelicaBaseAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.tokens");
+	}
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/ModelicaBaseParser.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/ModelicaBaseParser.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/ModelicaBaseParser.java	(revision 540)
@@ -0,0 +1,53 @@
+/*
+* generated by Xtext
+*/
+package org.modelica.xtext.parser.antlr;
+
+import org.antlr.runtime.ANTLRInputStream;
+import org.eclipse.xtext.parser.antlr.ITokenDefProvider;
+import org.eclipse.xtext.parser.IParseResult;
+import org.eclipse.xtext.parser.ParseException;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+
+import com.google.inject.Inject;
+
+import org.modelica.xtext.services.ModelicaBaseGrammarAccess;
+
+public class ModelicaBaseParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject 
+    protected ITokenDefProvider antlrTokenDefProvider;
+	
+	@Inject
+	private ModelicaBaseGrammarAccess grammarAccess;
+	
+	@Override
+	protected IParseResult parse(String ruleName, ANTLRInputStream in) {
+		org.modelica.xtext.parser.antlr.internal.InternalModelicaBaseLexer lexer = new org.modelica.xtext.parser.antlr.internal.InternalModelicaBaseLexer(in);
+		XtextTokenStream stream = new XtextTokenStream(lexer, antlrTokenDefProvider);
+		stream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+		org.modelica.xtext.parser.antlr.internal.InternalModelicaBaseParser parser = new org.modelica.xtext.parser.antlr.internal.InternalModelicaBaseParser(
+				stream, getElementFactory(), grammarAccess);
+		parser.setTokenTypeMap(antlrTokenDefProvider.getTokenDefMap());
+		try {
+			if(ruleName != null)
+				return parser.parse(ruleName);
+			return parser.parse();
+		} catch (Exception re) {
+			throw new ParseException(re.getMessage(),re);
+		}
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "StorageUnit";
+	}
+	
+	public ModelicaBaseGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(ModelicaBaseGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g	(revision 540)
@@ -0,0 +1,6807 @@
+/*
+* generated by Xtext
+*/
+grammar InternalModelicaBase;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+	
+}
+
+@lexer::header {
+package org.modelica.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.modelica.xtext.parser.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.xtext.parsetree.*;
+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.eclipse.xtext.conversion.ValueConverterException;
+import org.modelica.xtext.services.ModelicaBaseGrammarAccess;
+
+}
+
+@parser::members {
+ 
+ 	private ModelicaBaseGrammarAccess grammarAccess;
+ 	
+    public InternalModelicaBaseParser(TokenStream input, IAstFactory factory, ModelicaBaseGrammarAccess grammarAccess) {
+        this(input);
+        this.factory = factory;
+        registerRules(grammarAccess.getGrammar());
+        this.grammarAccess = grammarAccess;
+    }
+    
+    @Override
+    protected InputStream getTokenFile() {
+    	ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.tokens");
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "StorageUnit";	
+   	} 
+}
+
+@rulecatch { 
+    catch (RecognitionException re) { 
+        recover(input,re); 
+        appendSkippedTokens();
+    } 
+}
+
+
+
+
+// Entry rule entryRuleStorageUnit
+entryRuleStorageUnit returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getStorageUnitRule(), currentNode); }
+	 iv_ruleStorageUnit=ruleStorageUnit 
+	 { $current=$iv_ruleStorageUnit.current; } 
+	 EOF 
+;
+
+// Rule StorageUnit
+ruleStorageUnit returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(('within' 
+    {
+        createLeafNode(grammarAccess.getStorageUnitAccess().getWithinKeyword_0_0(), null); 
+    }
+(rulename_path)?RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getStorageUnitAccess().getSEMICOLONTerminalRuleCall_0_2(), null); 
+    }
+)?(('final' 
+    {
+        createLeafNode(grammarAccess.getStorageUnitAccess().getFinalKeyword_1_0(), null); 
+    }
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getStorageUnitAccess().getClassDefinitionClassDefinitionParserRuleCall_1_1_0(), currentNode); 
+	    }
+	    lv_classDefinition_4=ruleClassDefinition 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getStorageUnitRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "classDefinition", lv_classDefinition_4, "ClassDefinition", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)';' 
+    {
+        createLeafNode(grammarAccess.getStorageUnitAccess().getSemicolonKeyword_1_2(), null); 
+    }
+)*);
+
+
+
+
+
+
+
+// Entry rule entryRuleClassDefinition
+entryRuleClassDefinition returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getClassDefinitionRule(), currentNode); }
+	 iv_ruleClassDefinition=ruleClassDefinition 
+	 { $current=$iv_ruleClassDefinition.current; } 
+	 EOF 
+;
+
+// Rule ClassDefinition
+ruleClassDefinition returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    lv_encapsulated_0='encapsulated' 
+    {
+        createLeafNode(grammarAccess.getClassDefinitionAccess().getEncapsulatedEncapsulatedKeyword_0_0(), "encapsulated"); 
+    }
+
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "encapsulated", true, "encapsulated", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)?(	
+	
+	    lv_partial_1='partial' 
+    {
+        createLeafNode(grammarAccess.getClassDefinitionAccess().getPartialPartialKeyword_1_0(), "partial"); 
+    }
+
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "partial", true, "partial", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)?(	
+	
+	    lv_expandable_2='expandable' 
+    {
+        createLeafNode(grammarAccess.getClassDefinitionAccess().getExpandableExpandableKeyword_2_0(), "expandable"); 
+    }
+
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "expandable", true, "expandable", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getClassTypeClassTypeEnumRuleCall_3_0(), currentNode); 
+	    }
+	    lv_classType_3=ruleClassType 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "classType", lv_classType_3, "ClassType", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(((	
+	
+	    lv_name_4=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getClassDefinitionAccess().getNameIDENTTerminalRuleCall_4_0_0_0(), "name"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_4, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getCommentString_commentParserRuleCall_4_0_1_0(), currentNode); 
+	    }
+	    lv_comment_5=rulestring_comment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_5, "string_comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?)
+    |('extends' 
+    {
+        createLeafNode(grammarAccess.getClassDefinitionAccess().getExtendsKeyword_4_1_0(), null); 
+    }
+RULE_IDENT
+    { 
+    createLeafNode(grammarAccess.getClassDefinitionAccess().getIDENTTerminalRuleCall_4_1_1(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getModificationClass_modificationParserRuleCall_4_1_2_0(), currentNode); 
+	    }
+	    lv_modification_8=ruleclass_modification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_8, "class_modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(rulestring_comment)?))(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getElemListElementListParserRuleCall_5_0(), currentNode); 
+	    }
+	    lv_elemList_10=ruleElementList 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elemList", lv_elemList_10, "ElementList", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getElemListElementList2ParserRuleCall_6_0_0(), currentNode); 
+	    }
+	    lv_elemList_11=ruleElementList2 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elemList", lv_elemList_11, "ElementList2", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getInitialEquationClausesInitial_equation_rule_clauseParserRuleCall_6_1_0(), currentNode); 
+	    }
+	    lv_initialEquationClauses_12=ruleinitial_equation_rule_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "initialEquationClauses", lv_initialEquationClauses_12, "initial_equation_rule_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getInitialAlgorithmClausesInitial_algorithm_clauseParserRuleCall_6_2_0(), currentNode); 
+	    }
+	    lv_initialAlgorithmClauses_13=ruleinitial_algorithm_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "initialAlgorithmClauses", lv_initialAlgorithmClauses_13, "initial_algorithm_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getEquationClausesEquation_rule_clauseParserRuleCall_6_3_0(), currentNode); 
+	    }
+	    lv_equationClauses_14=ruleequation_rule_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "equationClauses", lv_equationClauses_14, "equation_rule_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getAlgorithmClausesAlgorithm_clauseParserRuleCall_6_4_0(), currentNode); 
+	    }
+	    lv_algorithmClauses_15=rulealgorithm_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "algorithmClauses", lv_algorithmClauses_15, "algorithm_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))*(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getExtClauseExternal_clauseParserRuleCall_7_0(), currentNode); 
+	    }
+	    lv_extClause_16=ruleexternal_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "extClause", lv_extClause_16, "external_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?'end' 
+    {
+        createLeafNode(grammarAccess.getClassDefinitionAccess().getEndKeyword_8(), null); 
+    }
+RULE_IDENT
+    { 
+    createLeafNode(grammarAccess.getClassDefinitionAccess().getIDENTTerminalRuleCall_9(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRulePartialDerivative
+entryRulePartialDerivative returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getPartialDerivativeRule(), currentNode); }
+	 iv_rulePartialDerivative=rulePartialDerivative 
+	 { $current=$iv_rulePartialDerivative.current; } 
+	 EOF 
+;
+
+// Rule PartialDerivative
+rulePartialDerivative returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('function' 
+    {
+        createLeafNode(grammarAccess.getPartialDerivativeAccess().getFunctionKeyword_0(), null); 
+    }
+(	
+	
+	    lv_name_1=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getPartialDerivativeAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getPartialDerivativeRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_1, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getPartialDerivativeAccess().getEQUALSTerminalRuleCall_2(), null); 
+    }
+'der' 
+    {
+        createLeafNode(grammarAccess.getPartialDerivativeAccess().getDerKeyword_3(), null); 
+    }
+'(' 
+    {
+        createLeafNode(grammarAccess.getPartialDerivativeAccess().getLeftParenthesisKeyword_4(), null); 
+    }
+rulename_path',' 
+    {
+        createLeafNode(grammarAccess.getPartialDerivativeAccess().getCommaKeyword_6(), null); 
+    }
+ruleident_list')' 
+    {
+        createLeafNode(grammarAccess.getPartialDerivativeAccess().getRightParenthesisKeyword_8(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getPartialDerivativeAccess().getCommentCommentParserRuleCall_9_0(), currentNode); 
+	    }
+	    lv_comment_9=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getPartialDerivativeRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_9, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleClassModification
+entryRuleClassModification returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getClassModificationRule(), currentNode); }
+	 iv_ruleClassModification=ruleClassModification 
+	 { $current=$iv_ruleClassModification.current; } 
+	 EOF 
+;
+
+// Rule ClassModification
+ruleClassModification returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getClassTypeClassTypeEnumRuleCall_0_0(), currentNode); 
+	    }
+	    lv_classType_0=ruleClassType 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "classType", lv_classType_0, "ClassType", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    lv_name_1=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getClassModificationAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_1, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getClassModificationAccess().getEQUALSTerminalRuleCall_2(), null); 
+    }
+ruletype_prefix(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getTypeSpecifierType_specifierParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_typeSpecifier_4=ruletype_specifier 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "typeSpecifier", lv_typeSpecifier_4, "type_specifier", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getModificationClass_modificationParserRuleCall_5_0(), currentNode); 
+	    }
+	    lv_modification_5=ruleclass_modification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_5, "class_modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getCommentCommentParserRuleCall_6_0(), currentNode); 
+	    }
+	    lv_comment_6=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_6, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleClassOverloading
+entryRuleClassOverloading returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getClassOverloadingRule(), currentNode); }
+	 iv_ruleClassOverloading=ruleClassOverloading 
+	 { $current=$iv_ruleClassOverloading.current; } 
+	 EOF 
+;
+
+// Rule ClassOverloading
+ruleClassOverloading returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassOverloadingAccess().getClassTypeClassTypeEnumRuleCall_0_0(), currentNode); 
+	    }
+	    lv_classType_0=ruleClassType 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassOverloadingRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "classType", lv_classType_0, "ClassType", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    lv_name_1=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getClassOverloadingAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassOverloadingRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_1, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getClassOverloadingAccess().getEQUALSTerminalRuleCall_2(), null); 
+    }
+'overload' 
+    {
+        createLeafNode(grammarAccess.getClassOverloadingAccess().getOverloadKeyword_3(), null); 
+    }
+'(' 
+    {
+        createLeafNode(grammarAccess.getClassOverloadingAccess().getLeftParenthesisKeyword_4(), null); 
+    }
+rulename_list')' 
+    {
+        createLeafNode(grammarAccess.getClassOverloadingAccess().getRightParenthesisKeyword_6(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClassOverloadingAccess().getCommentCommentParserRuleCall_7_0(), currentNode); 
+	    }
+	    lv_comment_7=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClassOverloadingRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_7, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleEnumeration
+entryRuleEnumeration returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getEnumerationRule(), currentNode); }
+	 iv_ruleEnumeration=ruleEnumeration 
+	 { $current=$iv_ruleEnumeration.current; } 
+	 EOF 
+;
+
+// Rule Enumeration
+ruleEnumeration returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getClassTypeClassTypeEnumRuleCall_0_0(), currentNode); 
+	    }
+	    lv_classType_0=ruleClassType 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "classType", lv_classType_0, "ClassType", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    lv_name_1=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getEnumerationAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_1, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getEnumerationAccess().getEQUALSTerminalRuleCall_2(), null); 
+    }
+'enumeration' 
+    {
+        createLeafNode(grammarAccess.getEnumerationAccess().getEnumerationKeyword_3(), null); 
+    }
+RULE_LPAR
+    { 
+    createLeafNode(grammarAccess.getEnumerationAccess().getLPARTerminalRuleCall_4(), null); 
+    }
+(((	
+	
+	    lv_ident_5=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getEnumerationAccess().getIdentIDENTTerminalRuleCall_5_0_0_0(), "ident"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		add($current, "ident", lv_ident_5, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getEnumCommentsCommentParserRuleCall_5_0_1_0(), currentNode); 
+	    }
+	    lv_enumComments_6=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "enumComments", lv_enumComments_6, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(RULE_COMMA
+    { 
+    createLeafNode(grammarAccess.getEnumerationAccess().getCOMMATerminalRuleCall_5_0_2_0(), null); 
+    }
+(	
+	
+	    lv_ident_8=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getEnumerationAccess().getIdentIDENTTerminalRuleCall_5_0_2_1_0(), "ident"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		add($current, "ident", lv_ident_8, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getEnumCommentsCommentParserRuleCall_5_0_2_2_0(), currentNode); 
+	    }
+	    lv_enumComments_9=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "enumComments", lv_enumComments_9, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))*)
+    |RULE_COLON
+    { 
+    createLeafNode(grammarAccess.getEnumerationAccess().getCOLONTerminalRuleCall_5_1(), null); 
+    }
+)RULE_RPAR
+    { 
+    createLeafNode(grammarAccess.getEnumerationAccess().getRPARTerminalRuleCall_6(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getCommentCommentParserRuleCall_7_0(), currentNode); 
+	    }
+	    lv_comment_12=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_12, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleident_list
+entryRuleident_list returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getIdent_listRule(), currentNode); } 
+	 iv_ruleident_list=ruleident_list 
+	 { $current=$iv_ruleident_list.current.getText(); }  
+	 EOF 
+;
+
+// Rule ident_list
+ruleident_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getIdent_listAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+(    this_COMMA_1=RULE_COMMA    {
+		$current.merge(this_COMMA_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getIdent_listAccess().getCOMMATerminalRuleCall_1_0(), null); 
+    }
+    this_IDENT_2=RULE_IDENT    {
+		$current.merge(this_IDENT_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getIdent_listAccess().getIDENTTerminalRuleCall_1_1(), null); 
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRulename_list
+entryRulename_list returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getName_listRule(), currentNode); } 
+	 iv_rulename_list=rulename_list 
+	 { $current=$iv_rulename_list.current.getText(); }  
+	 EOF 
+;
+
+// Rule name_list
+rulename_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getName_listAccess().getName_pathParserRuleCall_0(), currentNode); 
+    }
+    this_name_path_0=rulename_path    {
+		$current.merge(this_name_path_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(
+	kw=',' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getName_listAccess().getCommaKeyword_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getName_listAccess().getName_pathParserRuleCall_1_1(), currentNode); 
+    }
+    this_name_path_2=rulename_path    {
+		$current.merge(this_name_path_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRuleexternal_clause
+entryRuleexternal_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getExternal_clauseRule(), currentNode); }
+	 iv_ruleexternal_clause=ruleexternal_clause 
+	 { $current=$iv_ruleexternal_clause.current; } 
+	 EOF 
+;
+
+// Rule external_clause
+ruleexternal_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('external' 
+    {
+        createLeafNode(grammarAccess.getExternal_clauseAccess().getExternalKeyword_0(), null); 
+    }
+(	
+	
+	    lv_languageSpecification_1=	RULE_STRING
+	{
+		createLeafNode(grammarAccess.getExternal_clauseAccess().getLanguageSpecificationSTRINGTerminalRuleCall_1_0(), "languageSpecification"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getExternal_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "languageSpecification", lv_languageSpecification_1, "STRING", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)?(ruleexternal_function_call)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getExternal_clauseAccess().getAnnotationAnnotationParserRuleCall_3_0(), currentNode); 
+	    }
+	    lv_annotation_3=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getExternal_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "annotation", lv_annotation_3, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getExternal_clauseAccess().getSEMICOLONTerminalRuleCall_4(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getExternal_clauseAccess().getExtAnnotationAnnotationParserRuleCall_5_0_0(), currentNode); 
+	    }
+	    lv_extAnnotation_5=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getExternal_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "extAnnotation", lv_extAnnotation_5, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getExternal_clauseAccess().getSEMICOLONTerminalRuleCall_5_1(), null); 
+    }
+)?);
+
+
+
+
+
+// Entry rule entryRuleexternal_function_call
+entryRuleexternal_function_call returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getExternal_function_callRule(), currentNode); } 
+	 iv_ruleexternal_function_call=ruleexternal_function_call 
+	 { $current=$iv_ruleexternal_function_call.current.getText(); }  
+	 EOF 
+;
+
+// Rule external_function_call
+ruleexternal_function_call returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExternal_function_callAccess().getComponent_referenceParserRuleCall_0_0(), currentNode); 
+    }
+    this_component_reference_0=rulecomponent_reference    {
+		$current.merge(this_component_reference_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+    this_EQUALS_1=RULE_EQUALS    {
+		$current.merge(this_EQUALS_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getExternal_function_callAccess().getEQUALSTerminalRuleCall_0_1(), null); 
+    }
+)?    this_IDENT_2=RULE_IDENT    {
+		$current.merge(this_IDENT_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getExternal_function_callAccess().getIDENTTerminalRuleCall_1(), null); 
+    }
+    this_LPAR_3=RULE_LPAR    {
+		$current.merge(this_LPAR_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getExternal_function_callAccess().getLPARTerminalRuleCall_2(), null); 
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExternal_function_callAccess().getExpression_listParserRuleCall_3(), currentNode); 
+    }
+    this_expression_list_4=ruleexpression_list    {
+		$current.merge(this_expression_list_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?    this_RPAR_5=RULE_RPAR    {
+		$current.merge(this_RPAR_5);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getExternal_function_callAccess().getRPARTerminalRuleCall_4(), null); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleElementList
+entryRuleElementList returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElementListRule(), currentNode); }
+	 iv_ruleElementList=ruleElementList 
+	 { $current=$iv_ruleElementList.current; } 
+	 EOF 
+;
+
+// Rule ElementList
+ruleElementList returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementListAccess().getElementsClassElementParserRuleCall_0_0_0(), currentNode); 
+	    }
+	    lv_elements_0=ruleClassElement 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementListRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elements", lv_elements_0, "ClassElement", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementListAccess().getAnnotationsAnnotationParserRuleCall_0_1_0(), currentNode); 
+	    }
+	    lv_annotations_1=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementListRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "annotations", lv_annotations_1, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getElementListAccess().getSEMICOLONTerminalRuleCall_1(), null); 
+    }
+)*;
+
+
+
+
+
+// Entry rule entryRuleElementList2
+entryRuleElementList2 returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElementList2Rule(), currentNode); }
+	 iv_ruleElementList2=ruleElementList2 
+	 { $current=$iv_ruleElementList2.current; } 
+	 EOF 
+;
+
+// Rule ElementList2
+ruleElementList2 returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(('public' 
+    {
+        createLeafNode(grammarAccess.getElementList2Access().getPublicKeyword_0_0(), null); 
+    }
+(
+    { 
+        temp=factory.create(grammarAccess.getElementList2Access().getPublicElementListAction_0_1().getType().getClassifier());
+        $current = temp; 
+        temp = null;
+        CompositeNode newNode = createCompositeNode(grammarAccess.getElementList2Access().getPublicElementListAction_0_1(), currentNode.getParent());
+    newNode.getChildren().add(currentNode);
+    moveLookaheadInfo(currentNode, newNode);
+    currentNode = newNode; 
+        associateNodeWithAstElement(currentNode, $current); 
+    }
+)(((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getElementsClassElementParserRuleCall_0_2_0_0_0(), currentNode); 
+	    }
+	    lv_elements_2=ruleClassElement 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elements", lv_elements_2, "ClassElement", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getAnnotationsAnnotationParserRuleCall_0_2_0_1_0(), currentNode); 
+	    }
+	    lv_annotations_3=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "annotations", lv_annotations_3, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getElementList2Access().getSEMICOLONTerminalRuleCall_0_2_1(), null); 
+    }
+)*)
+    |('protected' 
+    {
+        createLeafNode(grammarAccess.getElementList2Access().getProtectedKeyword_1_0(), null); 
+    }
+(
+    { 
+        temp=factory.create(grammarAccess.getElementList2Access().getProtectesElementListAction_1_1().getType().getClassifier());
+        $current = temp; 
+        temp = null;
+        CompositeNode newNode = createCompositeNode(grammarAccess.getElementList2Access().getProtectesElementListAction_1_1(), currentNode.getParent());
+    newNode.getChildren().add(currentNode);
+    moveLookaheadInfo(currentNode, newNode);
+    currentNode = newNode; 
+        associateNodeWithAstElement(currentNode, $current); 
+    }
+)(((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getElementsClassElementParserRuleCall_1_2_0_0_0(), currentNode); 
+	    }
+	    lv_elements_7=ruleClassElement 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elements", lv_elements_7, "ClassElement", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getAnnotationsAnnotationParserRuleCall_1_2_0_1_0(), currentNode); 
+	    }
+	    lv_annotations_8=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "annotations", lv_annotations_8, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getElementList2Access().getSEMICOLONTerminalRuleCall_1_2_1(), null); 
+    }
+)*));
+
+
+
+
+
+// Entry rule entryRuleClassElement
+entryRuleClassElement returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getClassElementRule(), currentNode); }
+	 iv_ruleClassElement=ruleClassElement 
+	 { $current=$iv_ruleClassElement.current; } 
+	 EOF 
+;
+
+// Rule ClassElement
+ruleClassElement returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getImport_clauseParserRuleCall_0(), currentNode); 
+    }
+    this_import_clause_0=ruleimport_clause
+    { 
+        $current = $this_import_clause_0.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getExtends_clauseParserRuleCall_1(), currentNode); 
+    }
+    this_extends_clause_1=ruleextends_clause
+    { 
+        $current = $this_extends_clause_1.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |(('redeclare' 
+    {
+        createLeafNode(grammarAccess.getClassElementAccess().getRedeclareKeyword_2_0(), null); 
+    }
+)?('final' 
+    {
+        createLeafNode(grammarAccess.getClassElementAccess().getFinalKeyword_2_1(), null); 
+    }
+)?('inner' 
+    {
+        createLeafNode(grammarAccess.getClassElementAccess().getInnerKeyword_2_2(), null); 
+    }
+)?('outer' 
+    {
+        createLeafNode(grammarAccess.getClassElementAccess().getOuterKeyword_2_3(), null); 
+    }
+)?((
+    { 
+        currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getClassDefinitionParserRuleCall_2_4_0_0(), currentNode); 
+    }
+    this_ClassDefinition_6=ruleClassDefinition
+    { 
+        $current = $this_ClassDefinition_6.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getComponent_clauseParserRuleCall_2_4_0_1(), currentNode); 
+    }
+    this_component_clause_7=rulecomponent_clause
+    { 
+        $current = $this_component_clause_7.current; 
+        currentNode = currentNode.getParent();
+    }
+)
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getReplaceableElementClauseParserRuleCall_2_4_1(), currentNode); 
+    }
+    this_ReplaceableElementClause_8=ruleReplaceableElementClause
+    { 
+        $current = $this_ReplaceableElementClause_8.current; 
+        currentNode = currentNode.getParent();
+    }
+)));
+
+
+
+
+
+// Entry rule entryRuleReplaceableElementClause
+entryRuleReplaceableElementClause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getReplaceableElementClauseRule(), currentNode); }
+	 iv_ruleReplaceableElementClause=ruleReplaceableElementClause 
+	 { $current=$iv_ruleReplaceableElementClause.current; } 
+	 EOF 
+;
+
+// Rule ReplaceableElementClause
+ruleReplaceableElementClause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('replaceable' 
+    {
+        createLeafNode(grammarAccess.getReplaceableElementClauseAccess().getReplaceableKeyword_0(), null); 
+    }
+(	
+	
+	    lv_entity_1=(	{ 
+        currentNode=createCompositeNode(grammarAccess.getReplaceableElementClauseAccess().getEntityClassDefinitionParserRuleCall_1_0_0(), currentNode); 
+    }
+	ruleClassDefinition	{ 
+        currentNode = currentNode.getParent();
+    }
+
+    |	{ 
+        currentNode=createCompositeNode(grammarAccess.getReplaceableElementClauseAccess().getEntityComponent_clauseParserRuleCall_1_0_1(), currentNode); 
+    }
+	rulecomponent_clause	{ 
+        currentNode = currentNode.getParent();
+    }
+)
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getReplaceableElementClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "entity", lv_entity_1, null, lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getReplaceableElementClauseAccess().getConstrainConstraining_clauseParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_constrain_2=ruleconstraining_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getReplaceableElementClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "constrain", lv_constrain_2, "constraining_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?);
+
+
+
+
+
+// Entry rule entryRuleimport_clause
+entryRuleimport_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getImport_clauseRule(), currentNode); }
+	 iv_ruleimport_clause=ruleimport_clause 
+	 { $current=$iv_ruleimport_clause.current; } 
+	 EOF 
+;
+
+// Rule import_clause
+ruleimport_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('import' 
+    {
+        createLeafNode(grammarAccess.getImport_clauseAccess().getImportKeyword_0(), null); 
+    }
+(((	
+	
+	    lv_asName_1=	RULE_IDENT
+	{
+		createLeafNode(grammarAccess.getImport_clauseAccess().getAsNameIDENTTerminalRuleCall_1_0_0_0(), "asName"); 
+	}
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "asName", lv_asName_1, "IDENT", lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getImport_clauseAccess().getEQUALSTerminalRuleCall_1_0_1(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getImport_clauseAccess().getNameName_pathParserRuleCall_1_0_2_0(), currentNode); 
+	    }
+	    lv_name_3=rulename_path 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_3, "name_path", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))
+    |(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getImport_clauseAccess().getNameName_path_starParserRuleCall_1_1_0(), currentNode); 
+	    }
+	    lv_name_4=rulename_path_star 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_4, "name_path_star", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getImport_clauseAccess().getCommentCommentParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_comment_5=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_5, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleextends_clause
+entryRuleextends_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getExtends_clauseRule(), currentNode); }
+	 iv_ruleextends_clause=ruleextends_clause 
+	 { $current=$iv_ruleextends_clause.current; } 
+	 EOF 
+;
+
+// Rule extends_clause
+ruleextends_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('extends' 
+    {
+        createLeafNode(grammarAccess.getExtends_clauseAccess().getExtendsKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getExtends_clauseAccess().getBaseClassName_pathParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_baseClass_1=rulename_path 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getExtends_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "baseClass", lv_baseClass_1, "name_path", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getExtends_clauseAccess().getModificationClass_modificationParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_modification_2=ruleclass_modification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getExtends_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_2, "class_modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getExtends_clauseAccess().getAnnotationAnnotationParserRuleCall_3_0(), currentNode); 
+	    }
+	    lv_annotation_3=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getExtends_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "annotation", lv_annotation_3, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?);
+
+
+
+
+
+// Entry rule entryRuleconstraining_clause
+entryRuleconstraining_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConstraining_clauseRule(), currentNode); }
+	 iv_ruleconstraining_clause=ruleconstraining_clause 
+	 { $current=$iv_ruleconstraining_clause.current; } 
+	 EOF 
+;
+
+// Rule constraining_clause
+ruleconstraining_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((('extends' 
+    {
+        createLeafNode(grammarAccess.getConstraining_clauseAccess().getExtendsKeyword_0_0_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getNameName_pathParserRuleCall_0_0_1_0(), currentNode); 
+	    }
+	    lv_name_1=rulename_path 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_1, "name_path", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getModificationClass_modificationParserRuleCall_0_0_2_0(), currentNode); 
+	    }
+	    lv_modification_2=ruleclass_modification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_2, "class_modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?)
+    |('constrainedby' 
+    {
+        createLeafNode(grammarAccess.getConstraining_clauseAccess().getConstrainedbyKeyword_0_1_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getNameName_pathParserRuleCall_0_1_1_0(), currentNode); 
+	    }
+	    lv_name_4=rulename_path 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_4, "name_path", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getModificationClass_modificationParserRuleCall_0_1_2_0(), currentNode); 
+	    }
+	    lv_modification_5=ruleclass_modification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_5, "class_modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?))(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getCommentCommentParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_comment_6=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_6, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRulecomponent_clause
+entryRulecomponent_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getComponent_clauseRule(), currentNode); }
+	 iv_rulecomponent_clause=rulecomponent_clause 
+	 { $current=$iv_rulecomponent_clause.current; } 
+	 EOF 
+;
+
+// Rule component_clause
+rulecomponent_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getTypePrefixType_prefixParserRuleCall_0_0(), currentNode); 
+	    }
+	    lv_typePrefix_0=ruletype_prefix 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "typePrefix", lv_typePrefix_0, "type_prefix", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getTypeSpecifierType_specifierParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_typeSpecifier_1=ruletype_specifier 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "typeSpecifier", lv_typeSpecifier_1, "type_specifier", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getDeclarationsComponent_declarationParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_declarations_2=rulecomponent_declaration 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "declarations", lv_declarations_2, "component_declaration", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(RULE_COMMA
+    { 
+    createLeafNode(grammarAccess.getComponent_clauseAccess().getCOMMATerminalRuleCall_3_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getDeclarationsComponent_declarationParserRuleCall_3_1_0(), currentNode); 
+	    }
+	    lv_declarations_4=rulecomponent_declaration 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "declarations", lv_declarations_4, "component_declaration", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))*);
+
+
+
+
+
+// Entry rule entryRuletype_prefix
+entryRuletype_prefix returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getType_prefixRule(), currentNode); } 
+	 iv_ruletype_prefix=ruletype_prefix 
+	 { $current=$iv_ruletype_prefix.current.getText(); }  
+	 EOF 
+;
+
+// Rule type_prefix
+ruletype_prefix returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((
+	kw='flow' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getFlowKeyword_0_0(), null); 
+    }
+
+    |
+	kw='stream' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getStreamKeyword_0_1(), null); 
+    }
+)?(
+	kw='discrete' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getDiscreteKeyword_1_0(), null); 
+    }
+
+    |
+	kw='parameter' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getParameterKeyword_1_1(), null); 
+    }
+
+    |
+	kw='constant' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getConstantKeyword_1_2(), null); 
+    }
+)?(
+	kw='input' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getInputKeyword_2_0(), null); 
+    }
+
+    |
+	kw='output' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getType_prefixAccess().getOutputKeyword_2_1(), null); 
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRuletype_specifier
+entryRuletype_specifier returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getType_specifierRule(), currentNode); }
+	 iv_ruletype_specifier=ruletype_specifier 
+	 { $current=$iv_ruletype_specifier.current; } 
+	 EOF 
+;
+
+// Rule type_specifier
+ruletype_specifier returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getType_specifierAccess().getNameName_pathParserRuleCall_0_0(), currentNode); 
+	    }
+	    lv_name_0=rulename_path 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getType_specifierRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "name", lv_name_0, "name_path", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getType_specifierAccess().getSubscriptsArray_subscriptsParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_subscripts_1=rulearray_subscripts 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getType_specifierRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "subscripts", lv_subscripts_1, "array_subscripts", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?);
+
+
+
+
+
+// Entry rule entryRulecomponent_declaration
+entryRulecomponent_declaration returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getComponent_declarationRule(), currentNode); }
+	 iv_rulecomponent_declaration=rulecomponent_declaration 
+	 { $current=$iv_rulecomponent_declaration.current; } 
+	 EOF 
+;
+
+// Rule component_declaration
+rulecomponent_declaration returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(RULE_IDENT
+    { 
+    createLeafNode(grammarAccess.getComponent_declarationAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getSubscriptsArray_subscriptsParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_subscripts_1=rulearray_subscripts 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "subscripts", lv_subscripts_1, "array_subscripts", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getModificationModificationParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_modification_2=rulemodification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_2, "modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?('if' 
+    {
+        createLeafNode(grammarAccess.getComponent_declarationAccess().getIfKeyword_3_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getConditionExpressionParserRuleCall_3_1_0(), currentNode); 
+	    }
+	    lv_condition_4=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_4, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getCommentCommentParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_comment_5=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_5, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRulemodification
+entryRulemodification returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getModificationRule(), currentNode); }
+	 iv_rulemodification=rulemodification 
+	 { $current=$iv_rulemodification.current; } 
+	 EOF 
+;
+
+// Rule modification
+rulemodification returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getModificationAccess().getClass_modificationParserRuleCall_0(), currentNode); 
+    }
+    this_class_modification_0=ruleclass_modification
+    { 
+        $current = $this_class_modification_0.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getModificationAccess().getSimpleModificationParserRuleCall_1(), currentNode); 
+    }
+    this_SimpleModification_1=ruleSimpleModification
+    { 
+        $current = $this_SimpleModification_1.current; 
+        currentNode = currentNode.getParent();
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleSimpleModification
+entryRuleSimpleModification returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getSimpleModificationRule(), currentNode); }
+	 iv_ruleSimpleModification=ruleSimpleModification 
+	 { $current=$iv_ruleSimpleModification.current; } 
+	 EOF 
+;
+
+// Rule SimpleModification
+ruleSimpleModification returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getSimpleModificationAccess().getEQUALSTerminalRuleCall_0_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getSimpleModificationAccess().getExpressionExpressionParserRuleCall_0_1_0(), currentNode); 
+	    }
+	    lv_expression_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getSimpleModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "expression", lv_expression_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))
+    |(RULE_ASSIGN
+    { 
+    createLeafNode(grammarAccess.getSimpleModificationAccess().getASSIGNTerminalRuleCall_1_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getSimpleModificationAccess().getExpressionExpressionParserRuleCall_1_1_0(), currentNode); 
+	    }
+	    lv_expression_3=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getSimpleModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "expression", lv_expression_3, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)));
+
+
+
+
+
+// Entry rule entryRuleclass_modification
+entryRuleclass_modification returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getClass_modificationRule(), currentNode); }
+	 iv_ruleclass_modification=ruleclass_modification 
+	 { $current=$iv_ruleclass_modification.current; } 
+	 EOF 
+;
+
+// Rule class_modification
+ruleclass_modification returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+(RULE_LPAR
+    { 
+    createLeafNode(grammarAccess.getClass_modificationAccess().getLPARTerminalRuleCall_0(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClass_modificationAccess().getArgumentsArgumentParserRuleCall_1_0_0(), currentNode); 
+	    }
+	    lv_arguments_1=ruleargument 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClass_modificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "arguments", lv_arguments_1, "argument", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(RULE_COMMA
+    { 
+    createLeafNode(grammarAccess.getClass_modificationAccess().getCOMMATerminalRuleCall_1_1_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClass_modificationAccess().getArgumentsArgumentParserRuleCall_1_1_1_0(), currentNode); 
+	    }
+	    lv_arguments_3=ruleargument 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClass_modificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "arguments", lv_arguments_3, "argument", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))*)?RULE_RPAR
+    { 
+    createLeafNode(grammarAccess.getClass_modificationAccess().getRPARTerminalRuleCall_2(), null); 
+    }
+(RULE_EQUALS
+    { 
+    createLeafNode(grammarAccess.getClass_modificationAccess().getEQUALSTerminalRuleCall_3_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getClass_modificationAccess().getExpressionExpressionParserRuleCall_3_1_0(), currentNode); 
+	    }
+	    lv_expression_6=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getClass_modificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "expression", lv_expression_6, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+))?);
+
+
+
+
+
+// Entry rule entryRuleargument
+entryRuleargument returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getArgumentRule(), currentNode); }
+	 iv_ruleargument=ruleargument 
+	 { $current=$iv_ruleargument.current; } 
+	 EOF 
+;
+
+// Rule argument
+ruleargument returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((('each' 
+    {
+        createLeafNode(grammarAccess.getArgumentAccess().getEachKeyword_0_0(), null); 
+    }
+)?('final' 
+    {
+        createLeafNode(grammarAccess.getArgumentAccess().getFinalKeyword_0_1(), null); 
+    }
+)?(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArgumentAccess().getElementModificationParserRuleCall_0_2_0(), currentNode); 
+    }
+    this_ElementModification_2=ruleElementModification
+    { 
+        $current = $this_ElementModification_2.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArgumentAccess().getElementReplaceableClauseParserRuleCall_0_2_1(), currentNode); 
+    }
+    this_ElementReplaceableClause_3=ruleElementReplaceableClause
+    { 
+        $current = $this_ElementReplaceableClause_3.current; 
+        currentNode = currentNode.getParent();
+    }
+))
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArgumentAccess().getElementRedeclarationParserRuleCall_1(), currentNode); 
+    }
+    this_ElementRedeclaration_4=ruleElementRedeclaration
+    { 
+        $current = $this_ElementRedeclaration_4.current; 
+        currentNode = currentNode.getParent();
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleElementModification
+entryRuleElementModification returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElementModificationRule(), currentNode); }
+	 iv_ruleElementModification=ruleElementModification 
+	 { $current=$iv_ruleElementModification.current; } 
+	 EOF 
+;
+
+// Rule ElementModification
+ruleElementModification returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementModificationAccess().getComponetRefComponent_referenceParserRuleCall_0_0(), currentNode); 
+	    }
+	    lv_componetRef_0=rulecomponent_reference 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "componetRef", lv_componetRef_0, "component_reference", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementModificationAccess().getModificationModificationParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_modification_1=rulemodification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_1, "modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementModificationAccess().getCommentString_commentParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_comment_2=rulestring_comment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementModificationRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_2, "string_comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?);
+
+
+
+
+
+// Entry rule entryRuleElementRedeclaration
+entryRuleElementRedeclaration returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElementRedeclarationRule(), currentNode); }
+	 iv_ruleElementRedeclaration=ruleElementRedeclaration 
+	 { $current=$iv_ruleElementRedeclaration.current; } 
+	 EOF 
+;
+
+// Rule ElementRedeclaration
+ruleElementRedeclaration returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('redeclare' 
+    {
+        createLeafNode(grammarAccess.getElementRedeclarationAccess().getRedeclareKeyword_0(), null); 
+    }
+('each' 
+    {
+        createLeafNode(grammarAccess.getElementRedeclarationAccess().getEachKeyword_1(), null); 
+    }
+)?('final' 
+    {
+        createLeafNode(grammarAccess.getElementRedeclarationAccess().getFinalKeyword_2(), null); 
+    }
+)?((
+    { 
+        currentNode=createCompositeNode(grammarAccess.getElementRedeclarationAccess().getClassDefinitionParserRuleCall_3_0_0(), currentNode); 
+    }
+    this_ClassDefinition_3=ruleClassDefinition
+    { 
+        $current = $this_ClassDefinition_3.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getElementRedeclarationAccess().getElementComponentClauseParserRuleCall_3_0_1(), currentNode); 
+    }
+    this_ElementComponentClause_4=ruleElementComponentClause
+    { 
+        $current = $this_ElementComponentClause_4.current; 
+        currentNode = currentNode.getParent();
+    }
+)
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getElementRedeclarationAccess().getElementReplaceableClauseParserRuleCall_3_1(), currentNode); 
+    }
+    this_ElementReplaceableClause_5=ruleElementReplaceableClause
+    { 
+        $current = $this_ElementReplaceableClause_5.current; 
+        currentNode = currentNode.getParent();
+    }
+));
+
+
+
+
+
+// Entry rule entryRuleElementReplaceableClause
+entryRuleElementReplaceableClause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElementReplaceableClauseRule(), currentNode); }
+	 iv_ruleElementReplaceableClause=ruleElementReplaceableClause 
+	 { $current=$iv_ruleElementReplaceableClause.current; } 
+	 EOF 
+;
+
+// Rule ElementReplaceableClause
+ruleElementReplaceableClause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('replaceable' 
+    {
+        createLeafNode(grammarAccess.getElementReplaceableClauseAccess().getReplaceableKeyword_0(), null); 
+    }
+(	
+	
+	    lv_element_1=(	{ 
+        currentNode=createCompositeNode(grammarAccess.getElementReplaceableClauseAccess().getElementClassDefinitionParserRuleCall_1_0_0(), currentNode); 
+    }
+	ruleClassDefinition	{ 
+        currentNode = currentNode.getParent();
+    }
+
+    |	{ 
+        currentNode=createCompositeNode(grammarAccess.getElementReplaceableClauseAccess().getElementElementComponentClauseParserRuleCall_1_0_1(), currentNode); 
+    }
+	ruleElementComponentClause	{ 
+        currentNode = currentNode.getParent();
+    }
+)
+ 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode, $current);
+	        }
+	        
+	        try {
+	       		set($current, "element", lv_element_1, null, lastConsumedNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementReplaceableClauseAccess().getConstraintConstraining_clauseParserRuleCall_2_0(), currentNode); 
+	    }
+	    lv_constraint_2=ruleconstraining_clause 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "constraint", lv_constraint_2, "constraining_clause", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?);
+
+
+
+
+
+// Entry rule entryRuleElementComponentClause
+entryRuleElementComponentClause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElementComponentClauseRule(), currentNode); }
+	 iv_ruleElementComponentClause=ruleElementComponentClause 
+	 { $current=$iv_ruleElementComponentClause.current; } 
+	 EOF 
+;
+
+// Rule ElementComponentClause
+ruleElementComponentClause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getTypePrefixType_prefixParserRuleCall_0_0(), currentNode); 
+	    }
+	    lv_typePrefix_0=ruletype_prefix 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "typePrefix", lv_typePrefix_0, "type_prefix", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getTypeSpecifierType_specifierParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_typeSpecifier_1=ruletype_specifier 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "typeSpecifier", lv_typeSpecifier_1, "type_specifier", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_IDENT
+    { 
+    createLeafNode(grammarAccess.getElementComponentClauseAccess().getIDENTTerminalRuleCall_2(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getSubscriptsArray_subscriptsParserRuleCall_3_0(), currentNode); 
+	    }
+	    lv_subscripts_3=rulearray_subscripts 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "subscripts", lv_subscripts_3, "array_subscripts", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getModificationModificationParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_modification_4=rulemodification 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "modification", lv_modification_4, "modification", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getCommentCommentParserRuleCall_5_0(), currentNode); 
+	    }
+	    lv_comment_5=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_5, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleequation_rule_clause
+entryRuleequation_rule_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getEquation_rule_clauseRule(), currentNode); }
+	 iv_ruleequation_rule_clause=ruleequation_rule_clause 
+	 { $current=$iv_ruleequation_rule_clause.current; } 
+	 EOF 
+;
+
+// Rule equation_rule_clause
+ruleequation_rule_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('equation' 
+    {
+        createLeafNode(grammarAccess.getEquation_rule_clauseAccess().getEquationKeyword_0(), null); 
+    }
+(((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_clauseAccess().getEquationRulesEquation_ruleParserRuleCall_1_0_0_0(), currentNode); 
+	    }
+	    lv_equationRules_1=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "equationRules", lv_equationRules_1, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getEquation_rule_clauseAccess().getSEMICOLONTerminalRuleCall_1_0_1(), null); 
+    }
+)
+    |((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_clauseAccess().getAnnotationsAnnotationParserRuleCall_1_1_0_0(), currentNode); 
+	    }
+	    lv_annotations_3=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "annotations", lv_annotations_3, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getEquation_rule_clauseAccess().getSEMICOLONTerminalRuleCall_1_1_1(), null); 
+    }
+))+);
+
+
+
+
+
+// Entry rule entryRulealgorithm_clause
+entryRulealgorithm_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getAlgorithm_clauseRule(), currentNode); }
+	 iv_rulealgorithm_clause=rulealgorithm_clause 
+	 { $current=$iv_rulealgorithm_clause.current; } 
+	 EOF 
+;
+
+// Rule algorithm_clause
+rulealgorithm_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('algorithm' 
+    {
+        createLeafNode(grammarAccess.getAlgorithm_clauseAccess().getAlgorithmKeyword_0(), null); 
+    }
+(((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_clauseAccess().getAlgorithmRulesAlgorithmParserRuleCall_1_0_0_0(), currentNode); 
+	    }
+	    lv_algorithmRules_1=rulealgorithm 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "algorithmRules", lv_algorithmRules_1, "algorithm", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getAlgorithm_clauseAccess().getSEMICOLONTerminalRuleCall_1_0_1(), null); 
+    }
+)
+    |((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_clauseAccess().getAnnotationsAnnotationParserRuleCall_1_1_0_0(), currentNode); 
+	    }
+	    lv_annotations_3=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "annotations", lv_annotations_3, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getAlgorithm_clauseAccess().getSEMICOLONTerminalRuleCall_1_1_1(), null); 
+    }
+))+);
+
+
+
+
+
+// Entry rule entryRuleinitial_equation_rule_clause
+entryRuleinitial_equation_rule_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getInitial_equation_rule_clauseRule(), currentNode); }
+	 iv_ruleinitial_equation_rule_clause=ruleinitial_equation_rule_clause 
+	 { $current=$iv_ruleinitial_equation_rule_clause.current; } 
+	 EOF 
+;
+
+// Rule initial_equation_rule_clause
+ruleinitial_equation_rule_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('initial' 
+    {
+        createLeafNode(grammarAccess.getInitial_equation_rule_clauseAccess().getInitialKeyword_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getInitial_equation_rule_clauseAccess().getEquation_rule_clauseParserRuleCall_1(), currentNode); 
+    }
+    this_equation_rule_clause_1=ruleequation_rule_clause
+    { 
+        $current = $this_equation_rule_clause_1.current; 
+        currentNode = currentNode.getParent();
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleinitial_algorithm_clause
+entryRuleinitial_algorithm_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getInitial_algorithm_clauseRule(), currentNode); }
+	 iv_ruleinitial_algorithm_clause=ruleinitial_algorithm_clause 
+	 { $current=$iv_ruleinitial_algorithm_clause.current; } 
+	 EOF 
+;
+
+// Rule initial_algorithm_clause
+ruleinitial_algorithm_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('initial' 
+    {
+        createLeafNode(grammarAccess.getInitial_algorithm_clauseAccess().getInitialKeyword_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getInitial_algorithm_clauseAccess().getAlgorithm_clauseParserRuleCall_1(), currentNode); 
+    }
+    this_algorithm_clause_1=rulealgorithm_clause
+    { 
+        $current = $this_algorithm_clause_1.current; 
+        currentNode = currentNode.getParent();
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleequation_rule
+entryRuleequation_rule returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getEquation_ruleRule(), currentNode); }
+	 iv_ruleequation_rule=ruleequation_rule 
+	 { $current=$iv_ruleequation_rule.current; } 
+	 EOF 
+;
+
+// Rule equation_rule
+ruleequation_rule returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((ruleequality_equation_rule
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getConditional_equation_rule_eParserRuleCall_0_1(), currentNode); 
+    }
+    this_conditional_equation_rule_e_1=ruleconditional_equation_rule_e
+    { 
+        $current = $this_conditional_equation_rule_e_1.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getFor_clause_eParserRuleCall_0_2(), currentNode); 
+    }
+    this_for_clause_e_2=rulefor_clause_e
+    { 
+        $current = $this_for_clause_e_2.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |ruleconnect_clause
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getWhen_clause_eParserRuleCall_0_4(), currentNode); 
+    }
+    this_when_clause_e_4=rulewhen_clause_e
+    { 
+        $current = $this_when_clause_e_4.current; 
+        currentNode = currentNode.getParent();
+    }
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getCommentCommentParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_comment_5=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEquation_ruleRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_5, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRulealgorithm
+entryRulealgorithm returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getAlgorithmRule(), currentNode); }
+	 iv_rulealgorithm=rulealgorithm 
+	 { $current=$iv_rulealgorithm.current; } 
+	 EOF 
+;
+
+// Rule algorithm
+rulealgorithm returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((ruleassign_clause_a
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getConditional_equation_rule_aParserRuleCall_0_1(), currentNode); 
+    }
+    this_conditional_equation_rule_a_1=ruleconditional_equation_rule_a
+    { 
+        $current = $this_conditional_equation_rule_a_1.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getFor_clause_aParserRuleCall_0_2(), currentNode); 
+    }
+    this_for_clause_a_2=rulefor_clause_a
+    { 
+        $current = $this_for_clause_a_2.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getWhile_clauseParserRuleCall_0_3(), currentNode); 
+    }
+    this_while_clause_3=rulewhile_clause
+    { 
+        $current = $this_while_clause_3.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getWhen_clause_aParserRuleCall_0_4(), currentNode); 
+    }
+    this_when_clause_a_4=rulewhen_clause_a
+    { 
+        $current = $this_when_clause_a_4.current; 
+        currentNode = currentNode.getParent();
+    }
+
+    |'break' 
+    {
+        createLeafNode(grammarAccess.getAlgorithmAccess().getBreakKeyword_0_5(), null); 
+    }
+
+    |'return' 
+    {
+        createLeafNode(grammarAccess.getAlgorithmAccess().getReturnKeyword_0_6(), null); 
+    }
+)(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getCommentCommentParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_comment_7=rulecomment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getAlgorithmRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "comment", lv_comment_7, "comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+));
+
+
+
+
+
+// Entry rule entryRuleassign_clause_a
+entryRuleassign_clause_a returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getAssign_clause_aRule(), currentNode); } 
+	 iv_ruleassign_clause_a=ruleassign_clause_a 
+	 { $current=$iv_ruleassign_clause_a.current.getText(); }  
+	 EOF 
+;
+
+// Rule assign_clause_a
+ruleassign_clause_a returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAssign_clause_aAccess().getSimple_expressionParserRuleCall_0(), currentNode); 
+    }
+    this_simple_expression_0=rulesimple_expression    {
+		$current.merge(this_simple_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+((    this_ASSIGN_1=RULE_ASSIGN    {
+		$current.merge(this_ASSIGN_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getAssign_clause_aAccess().getASSIGNTerminalRuleCall_1_0_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAssign_clause_aAccess().getExpressionParserRuleCall_1_0_1(), currentNode); 
+    }
+    this_expression_2=ruleexpression    {
+		$current.merge(this_expression_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    |(    this_EQUALS_3=RULE_EQUALS    {
+		$current.merge(this_EQUALS_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getAssign_clause_aAccess().getEQUALSTerminalRuleCall_1_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAssign_clause_aAccess().getExpressionParserRuleCall_1_1_1(), currentNode); 
+    }
+    this_expression_4=ruleexpression    {
+		$current.merge(this_expression_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+))?)
+    ;
+
+
+
+
+
+// Entry rule entryRuleequality_equation_rule
+entryRuleequality_equation_rule returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getEquality_equation_ruleRule(), currentNode); } 
+	 iv_ruleequality_equation_rule=ruleequality_equation_rule 
+	 { $current=$iv_ruleequality_equation_rule.current.getText(); }  
+	 EOF 
+;
+
+// Rule equality_equation_rule
+ruleequality_equation_rule returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getEquality_equation_ruleAccess().getSimple_expressionParserRuleCall_0(), currentNode); 
+    }
+    this_simple_expression_0=rulesimple_expression    {
+		$current.merge(this_simple_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_EQUALS_1=RULE_EQUALS    {
+		$current.merge(this_EQUALS_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getEquality_equation_ruleAccess().getEQUALSTerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getEquality_equation_ruleAccess().getExpressionParserRuleCall_1_1(), currentNode); 
+    }
+    this_expression_2=ruleexpression    {
+		$current.merge(this_expression_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRuleconditional_equation_rule_e
+entryRuleconditional_equation_rule_e returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConditional_equation_rule_eRule(), currentNode); }
+	 iv_ruleconditional_equation_rule_e=ruleconditional_equation_rule_e 
+	 { $current=$iv_ruleconditional_equation_rule_e.current; } 
+	 EOF 
+;
+
+// Rule conditional_equation_rule_e
+ruleconditional_equation_rule_e returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('if' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getIfKeyword_0(), null); 
+    }
+ruleexpression'then' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenEquationClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_eAccess().getElseifClausesEquation_rule_elseifParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_elseifClauses_5=ruleequation_rule_elseif 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elseifClauses", lv_elseifClauses_5, "equation_rule_elseif", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)*('else' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getElseKeyword_5_0(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_eAccess().getElseEquationClausesEquation_ruleParserRuleCall_5_1_0_0(), currentNode); 
+	    }
+	    lv_elseEquationClauses_7=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elseEquationClauses", lv_elseEquationClauses_7, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getSEMICOLONTerminalRuleCall_5_1_1(), null); 
+    }
+)*)?'end' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getEndKeyword_6(), null); 
+    }
+'if' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getIfKeyword_7(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleconditional_equation_rule_a
+entryRuleconditional_equation_rule_a returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConditional_equation_rule_aRule(), currentNode); }
+	 iv_ruleconditional_equation_rule_a=ruleconditional_equation_rule_a 
+	 { $current=$iv_ruleconditional_equation_rule_a.current; } 
+	 EOF 
+;
+
+// Rule conditional_equation_rule_a
+ruleconditional_equation_rule_a returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('if' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getIfKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getThenAlgorithmClausesAlgorithmParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenAlgorithmClauses_3=rulealgorithm 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "algorithm", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getElseifClausesAlgorithm_elseifParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_elseifClauses_5=rulealgorithm_elseif 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elseifClauses", lv_elseifClauses_5, "algorithm_elseif", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)*('else' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getElseKeyword_5_0(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getElseAlgotithmClausesAlgorithmParserRuleCall_5_1_0_0(), currentNode); 
+	    }
+	    lv_elseAlgotithmClauses_7=rulealgorithm 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elseAlgotithmClauses", lv_elseAlgotithmClauses_7, "algorithm", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getSEMICOLONTerminalRuleCall_5_1_1(), null); 
+    }
+)*)?'end' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getEndKeyword_6(), null); 
+    }
+'if' 
+    {
+        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getIfKeyword_7(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRulefor_clause_e
+entryRulefor_clause_e returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFor_clause_eRule(), currentNode); }
+	 iv_rulefor_clause_e=rulefor_clause_e 
+	 { $current=$iv_rulefor_clause_e.current; } 
+	 EOF 
+;
+
+// Rule for_clause_e
+rulefor_clause_e returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('for' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_eAccess().getForKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getFor_clause_eAccess().getForIndicesFor_indicesParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_forIndices_1=rulefor_indices 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getFor_clause_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "forIndices", lv_forIndices_1, "for_indices", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'loop' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_eAccess().getLoopKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getFor_clause_eAccess().getEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_equationClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getFor_clause_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "equationClauses", lv_equationClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getFor_clause_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*'end' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_eAccess().getEndKeyword_4(), null); 
+    }
+'for' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_eAccess().getForKeyword_5(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRulefor_clause_a
+entryRulefor_clause_a returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFor_clause_aRule(), currentNode); }
+	 iv_rulefor_clause_a=rulefor_clause_a 
+	 { $current=$iv_rulefor_clause_a.current; } 
+	 EOF 
+;
+
+// Rule for_clause_a
+rulefor_clause_a returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('for' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_aAccess().getForKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getFor_clause_aAccess().getForIndicesFor_indicesParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_forIndices_1=rulefor_indices 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getFor_clause_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "forIndices", lv_forIndices_1, "for_indices", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'loop' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_aAccess().getLoopKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getFor_clause_aAccess().getAlgorithmClausesAlgorithmParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_algorithmClauses_3=rulealgorithm 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getFor_clause_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "algorithmClauses", lv_algorithmClauses_3, "algorithm", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getFor_clause_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*'end' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_aAccess().getEndKeyword_4(), null); 
+    }
+'for' 
+    {
+        createLeafNode(grammarAccess.getFor_clause_aAccess().getForKeyword_5(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRulewhile_clause
+entryRulewhile_clause returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getWhile_clauseRule(), currentNode); }
+	 iv_rulewhile_clause=rulewhile_clause 
+	 { $current=$iv_rulewhile_clause.current; } 
+	 EOF 
+;
+
+// Rule while_clause
+rulewhile_clause returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('while' 
+    {
+        createLeafNode(grammarAccess.getWhile_clauseAccess().getWhileKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhile_clauseAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhile_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'loop' 
+    {
+        createLeafNode(grammarAccess.getWhile_clauseAccess().getLoopKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhile_clauseAccess().getAlgorithmClausesAlgorithmParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_algorithmClauses_3=rulealgorithm 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhile_clauseRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "algorithmClauses", lv_algorithmClauses_3, "algorithm", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getWhile_clauseAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*'end' 
+    {
+        createLeafNode(grammarAccess.getWhile_clauseAccess().getEndKeyword_4(), null); 
+    }
+'while' 
+    {
+        createLeafNode(grammarAccess.getWhile_clauseAccess().getWhileKeyword_5(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRulewhen_clause_e
+entryRulewhen_clause_e returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getWhen_clause_eRule(), currentNode); }
+	 iv_rulewhen_clause_e=rulewhen_clause_e 
+	 { $current=$iv_rulewhen_clause_e.current; } 
+	 EOF 
+;
+
+// Rule when_clause_e
+rulewhen_clause_e returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('when' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_eAccess().getWhenKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_eAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhen_clause_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_eAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenEquationClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhen_clause_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getWhen_clause_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_eAccess().getElseWhenClausesElse_when_eParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_elseWhenClauses_5=ruleelse_when_e 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhen_clause_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elseWhenClauses", lv_elseWhenClauses_5, "else_when_e", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)*'end' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_eAccess().getEndKeyword_5(), null); 
+    }
+'when' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_eAccess().getWhenKeyword_6(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleelse_when_e
+entryRuleelse_when_e returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElse_when_eRule(), currentNode); }
+	 iv_ruleelse_when_e=ruleelse_when_e 
+	 { $current=$iv_ruleelse_when_e.current; } 
+	 EOF 
+;
+
+// Rule else_when_e
+ruleelse_when_e returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('elsewhen' 
+    {
+        createLeafNode(grammarAccess.getElse_when_eAccess().getElsewhenKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElse_when_eAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElse_when_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getElse_when_eAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElse_when_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenEquationClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElse_when_eRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getElse_when_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*);
+
+
+
+
+
+// Entry rule entryRulewhen_clause_a
+entryRulewhen_clause_a returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getWhen_clause_aRule(), currentNode); }
+	 iv_rulewhen_clause_a=rulewhen_clause_a 
+	 { $current=$iv_rulewhen_clause_a.current; } 
+	 EOF 
+;
+
+// Rule when_clause_a
+rulewhen_clause_a returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('when' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_aAccess().getWhenKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_aAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhen_clause_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_aAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_aAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenAlgorithmClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhen_clause_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getWhen_clause_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_aAccess().getElseWhenClausesElse_when_aParserRuleCall_4_0(), currentNode); 
+	    }
+	    lv_elseWhenClauses_5=ruleelse_when_a 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getWhen_clause_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "elseWhenClauses", lv_elseWhenClauses_5, "else_when_a", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)*'end' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_aAccess().getEndKeyword_5(), null); 
+    }
+'when' 
+    {
+        createLeafNode(grammarAccess.getWhen_clause_aAccess().getWhenKeyword_6(), null); 
+    }
+);
+
+
+
+
+
+// Entry rule entryRuleelse_when_a
+entryRuleelse_when_a returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElse_when_aRule(), currentNode); }
+	 iv_ruleelse_when_a=ruleelse_when_a 
+	 { $current=$iv_ruleelse_when_a.current; } 
+	 EOF 
+;
+
+// Rule else_when_a
+ruleelse_when_a returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('elsewhen' 
+    {
+        createLeafNode(grammarAccess.getElse_when_aAccess().getElsewhenKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElse_when_aAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElse_when_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getElse_when_aAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getElse_when_aAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenAlgorithmClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getElse_when_aRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getElse_when_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*);
+
+
+
+
+
+// Entry rule entryRuleequation_rule_elseif
+entryRuleequation_rule_elseif returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getEquation_rule_elseifRule(), currentNode); }
+	 iv_ruleequation_rule_elseif=ruleequation_rule_elseif 
+	 { $current=$iv_ruleequation_rule_elseif.current; } 
+	 EOF 
+;
+
+// Rule equation_rule_elseif
+ruleequation_rule_elseif returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('elseif' 
+    {
+        createLeafNode(grammarAccess.getEquation_rule_elseifAccess().getElseifKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_elseifAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEquation_rule_elseifRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getEquation_rule_elseifAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_elseifAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenEquationClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getEquation_rule_elseifRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getEquation_rule_elseifAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*);
+
+
+
+
+
+// Entry rule entryRulealgorithm_elseif
+entryRulealgorithm_elseif returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getAlgorithm_elseifRule(), currentNode); }
+	 iv_rulealgorithm_elseif=rulealgorithm_elseif 
+	 { $current=$iv_rulealgorithm_elseif.current; } 
+	 EOF 
+;
+
+// Rule algorithm_elseif
+rulealgorithm_elseif returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('elseif' 
+    {
+        createLeafNode(grammarAccess.getAlgorithm_elseifAccess().getElseifKeyword_0(), null); 
+    }
+(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_elseifAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_condition_1=ruleexpression 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getAlgorithm_elseifRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "condition", lv_condition_1, "expression", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)'then' 
+    {
+        createLeafNode(grammarAccess.getAlgorithm_elseifAccess().getThenKeyword_2(), null); 
+    }
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_elseifAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+	    }
+	    lv_thenAlgorithmClauses_3=ruleequation_rule 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getAlgorithm_elseifRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		add($current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "equation_rule", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)RULE_SEMICOLON
+    { 
+    createLeafNode(grammarAccess.getAlgorithm_elseifAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+    }
+)*);
+
+
+
+
+
+// Entry rule entryRuleconnect_clause
+entryRuleconnect_clause returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConnect_clauseRule(), currentNode); } 
+	 iv_ruleconnect_clause=ruleconnect_clause 
+	 { $current=$iv_ruleconnect_clause.current.getText(); }  
+	 EOF 
+;
+
+// Rule connect_clause
+ruleconnect_clause returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+	kw='connect' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getConnect_clauseAccess().getConnectKeyword_0(), null); 
+    }
+    this_LPAR_1=RULE_LPAR    {
+		$current.merge(this_LPAR_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getConnect_clauseAccess().getLPARTerminalRuleCall_1(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getConnect_clauseAccess().getConnector_refParserRuleCall_2(), currentNode); 
+    }
+    this_connector_ref_2=ruleconnector_ref    {
+		$current.merge(this_connector_ref_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+    this_COMMA_3=RULE_COMMA    {
+		$current.merge(this_COMMA_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getConnect_clauseAccess().getCOMMATerminalRuleCall_3(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getConnect_clauseAccess().getConnector_refParserRuleCall_4(), currentNode); 
+    }
+    this_connector_ref_4=ruleconnector_ref    {
+		$current.merge(this_connector_ref_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+    this_RPAR_5=RULE_RPAR    {
+		$current.merge(this_RPAR_5);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getConnect_clauseAccess().getRPARTerminalRuleCall_5(), null); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleconnector_ref
+entryRuleconnector_ref returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConnector_refRule(), currentNode); } 
+	 iv_ruleconnector_ref=ruleconnector_ref 
+	 { $current=$iv_ruleconnector_ref.current.getText(); }  
+	 EOF 
+;
+
+// Rule connector_ref
+ruleconnector_ref returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getConnector_refAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getConnector_refAccess().getArray_subscriptsParserRuleCall_1(), currentNode); 
+    }
+    this_array_subscripts_1=rulearray_subscripts    {
+		$current.merge(this_array_subscripts_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?(    this_DOT_2=RULE_DOT    {
+		$current.merge(this_DOT_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getConnector_refAccess().getDOTTerminalRuleCall_2_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getConnector_refAccess().getConnector_ref_2ParserRuleCall_2_1(), currentNode); 
+    }
+    this_connector_ref_2_3=ruleconnector_ref_2    {
+		$current.merge(this_connector_ref_2_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRuleconnector_ref_2
+entryRuleconnector_ref_2 returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getConnector_ref_2Rule(), currentNode); } 
+	 iv_ruleconnector_ref_2=ruleconnector_ref_2 
+	 { $current=$iv_ruleconnector_ref_2.current.getText(); }  
+	 EOF 
+;
+
+// Rule connector_ref_2
+ruleconnector_ref_2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getConnector_ref_2Access().getIDENTTerminalRuleCall_0(), null); 
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getConnector_ref_2Access().getArray_subscriptsParserRuleCall_1(), currentNode); 
+    }
+    this_array_subscripts_1=rulearray_subscripts    {
+		$current.merge(this_array_subscripts_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRuleexpression
+entryRuleexpression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getExpressionRule(), currentNode); } 
+	 iv_ruleexpression=ruleexpression 
+	 { $current=$iv_ruleexpression.current.getText(); }  
+	 EOF 
+;
+
+// Rule expression
+ruleexpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExpressionAccess().getIf_expressionParserRuleCall_0(), currentNode); 
+    }
+    this_if_expression_0=ruleif_expression    {
+		$current.merge(this_if_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExpressionAccess().getSimple_expressionParserRuleCall_1(), currentNode); 
+    }
+    this_simple_expression_1=rulesimple_expression    {
+		$current.merge(this_simple_expression_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    ;
+
+
+
+
+
+
+
+// Entry rule entryRuleif_expression
+entryRuleif_expression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getIf_expressionRule(), currentNode); } 
+	 iv_ruleif_expression=ruleif_expression 
+	 { $current=$iv_ruleif_expression.current.getText(); }  
+	 EOF 
+;
+
+// Rule if_expression
+ruleif_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+	kw='if' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getIf_expressionAccess().getIfKeyword_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getExpressionParserRuleCall_1(), currentNode); 
+    }
+    this_expression_1=ruleexpression    {
+		$current.merge(this_expression_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+	kw='then' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getIf_expressionAccess().getThenKeyword_2(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getExpressionParserRuleCall_3(), currentNode); 
+    }
+    this_expression_3=ruleexpression    {
+		$current.merge(this_expression_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getElseif_expressionParserRuleCall_4(), currentNode); 
+    }
+    this_elseif_expression_4=ruleelseif_expression    {
+		$current.merge(this_elseif_expression_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*
+	kw='else' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getIf_expressionAccess().getElseKeyword_5(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getExpressionParserRuleCall_6(), currentNode); 
+    }
+    this_expression_6=ruleexpression    {
+		$current.merge(this_expression_6);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleelseif_expression
+entryRuleelseif_expression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getElseif_expressionRule(), currentNode); } 
+	 iv_ruleelseif_expression=ruleelseif_expression 
+	 { $current=$iv_ruleelseif_expression.current.getText(); }  
+	 EOF 
+;
+
+// Rule elseif_expression
+ruleelseif_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+	kw='elseif' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getElseif_expressionAccess().getElseifKeyword_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getElseif_expressionAccess().getExpressionParserRuleCall_1(), currentNode); 
+    }
+    this_expression_1=ruleexpression    {
+		$current.merge(this_expression_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+	kw='then' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getElseif_expressionAccess().getThenKeyword_2(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getElseif_expressionAccess().getExpressionParserRuleCall_3(), currentNode); 
+    }
+    this_expression_3=ruleexpression    {
+		$current.merge(this_expression_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRulefor_indices
+entryRulefor_indices returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFor_indicesRule(), currentNode); } 
+	 iv_rulefor_indices=rulefor_indices 
+	 { $current=$iv_rulefor_indices.current.getText(); }  
+	 EOF 
+;
+
+// Rule for_indices
+rulefor_indices returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_indicesAccess().getFor_indexParserRuleCall_0(), currentNode); 
+    }
+    this_for_index_0=rulefor_index    {
+		$current.merge(this_for_index_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COMMA_1=RULE_COMMA    {
+		$current.merge(this_COMMA_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFor_indicesAccess().getCOMMATerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_indicesAccess().getFor_indexParserRuleCall_1_1(), currentNode); 
+    }
+    this_for_index_2=rulefor_index    {
+		$current.merge(this_for_index_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRulefor_index
+entryRulefor_index returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFor_indexRule(), currentNode); } 
+	 iv_rulefor_index=rulefor_index 
+	 { $current=$iv_rulefor_index.current.getText(); }  
+	 EOF 
+;
+
+// Rule for_index
+rulefor_index returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFor_indexAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+(
+	kw='in' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getFor_indexAccess().getInKeyword_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_indexAccess().getExpressionParserRuleCall_1_1(), currentNode); 
+    }
+    this_expression_2=ruleexpression    {
+		$current.merge(this_expression_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulesimple_expression
+entryRulesimple_expression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getSimple_expressionRule(), currentNode); } 
+	 iv_rulesimple_expression=rulesimple_expression 
+	 { $current=$iv_rulesimple_expression.current.getText(); }  
+	 EOF 
+;
+
+// Rule simple_expression
+rulesimple_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getSimple_expressionAccess().getSimple_exprParserRuleCall(), currentNode); 
+    }
+    this_simple_expr_0=rulesimple_expr    {
+		$current.merge(this_simple_expr_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+    ;
+
+
+
+
+
+// Entry rule entryRulesimple_expr
+entryRulesimple_expr returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getSimple_exprRule(), currentNode); } 
+	 iv_rulesimple_expr=rulesimple_expr 
+	 { $current=$iv_rulesimple_expr.current.getText(); }  
+	 EOF 
+;
+
+// Rule simple_expr
+rulesimple_expr returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getSimple_exprAccess().getLogical_expressionParserRuleCall_0(), currentNode); 
+    }
+    this_logical_expression_0=rulelogical_expression    {
+		$current.merge(this_logical_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COLON_1=RULE_COLON    {
+		$current.merge(this_COLON_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getSimple_exprAccess().getCOLONTerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getSimple_exprAccess().getLogical_expressionParserRuleCall_1_1(), currentNode); 
+    }
+    this_logical_expression_2=rulelogical_expression    {
+		$current.merge(this_logical_expression_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COLON_3=RULE_COLON    {
+		$current.merge(this_COLON_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getSimple_exprAccess().getCOLONTerminalRuleCall_1_2_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getSimple_exprAccess().getLogical_expressionParserRuleCall_1_2_1(), currentNode); 
+    }
+    this_logical_expression_4=rulelogical_expression    {
+		$current.merge(this_logical_expression_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulelogical_expression
+entryRulelogical_expression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getLogical_expressionRule(), currentNode); } 
+	 iv_rulelogical_expression=rulelogical_expression 
+	 { $current=$iv_rulelogical_expression.current.getText(); }  
+	 EOF 
+;
+
+// Rule logical_expression
+rulelogical_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getLogical_expressionAccess().getLogical_termParserRuleCall_0(), currentNode); 
+    }
+    this_logical_term_0=rulelogical_term    {
+		$current.merge(this_logical_term_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(
+	kw='or' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getLogical_expressionAccess().getOrKeyword_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getLogical_expressionAccess().getLogical_termParserRuleCall_1_1(), currentNode); 
+    }
+    this_logical_term_2=rulelogical_term    {
+		$current.merge(this_logical_term_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRulelogical_term
+entryRulelogical_term returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getLogical_termRule(), currentNode); } 
+	 iv_rulelogical_term=rulelogical_term 
+	 { $current=$iv_rulelogical_term.current.getText(); }  
+	 EOF 
+;
+
+// Rule logical_term
+rulelogical_term returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getLogical_termAccess().getLogical_factorParserRuleCall_0(), currentNode); 
+    }
+    this_logical_factor_0=rulelogical_factor    {
+		$current.merge(this_logical_factor_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(
+	kw='and' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getLogical_termAccess().getAndKeyword_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getLogical_termAccess().getLogical_factorParserRuleCall_1_1(), currentNode); 
+    }
+    this_logical_factor_2=rulelogical_factor    {
+		$current.merge(this_logical_factor_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRulelogical_factor
+entryRulelogical_factor returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getLogical_factorRule(), currentNode); } 
+	 iv_rulelogical_factor=rulelogical_factor 
+	 { $current=$iv_rulelogical_factor.current.getText(); }  
+	 EOF 
+;
+
+// Rule logical_factor
+rulelogical_factor returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((
+	kw='not' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getLogical_factorAccess().getNotKeyword_0(), null); 
+    }
+)?
+    { 
+        currentNode=createCompositeNode(grammarAccess.getLogical_factorAccess().getRelationParserRuleCall_1(), currentNode); 
+    }
+    this_relation_1=rulerelation    {
+		$current.merge(this_relation_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRulerelation
+entryRulerelation returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getRelationRule(), currentNode); } 
+	 iv_rulerelation=rulerelation 
+	 { $current=$iv_rulerelation.current.getText(); }  
+	 EOF 
+;
+
+// Rule relation
+rulerelation returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getRelationAccess().getArithmetic_expressionParserRuleCall_0(), currentNode); 
+    }
+    this_arithmetic_expression_0=rulearithmetic_expression    {
+		$current.merge(this_arithmetic_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+((    this_LESS_1=RULE_LESS    {
+		$current.merge(this_LESS_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getRelationAccess().getLESSTerminalRuleCall_1_0_0(), null); 
+    }
+
+    |    this_LESSEQ_2=RULE_LESSEQ    {
+		$current.merge(this_LESSEQ_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getRelationAccess().getLESSEQTerminalRuleCall_1_0_1(), null); 
+    }
+
+    |    this_GREATER_3=RULE_GREATER    {
+		$current.merge(this_GREATER_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getRelationAccess().getGREATERTerminalRuleCall_1_0_2(), null); 
+    }
+
+    |    this_GREATEREQ_4=RULE_GREATEREQ    {
+		$current.merge(this_GREATEREQ_4);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getRelationAccess().getGREATEREQTerminalRuleCall_1_0_3(), null); 
+    }
+
+    |    this_EQEQ_5=RULE_EQEQ    {
+		$current.merge(this_EQEQ_5);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getRelationAccess().getEQEQTerminalRuleCall_1_0_4(), null); 
+    }
+
+    |    this_LESSGT_6=RULE_LESSGT    {
+		$current.merge(this_LESSGT_6);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getRelationAccess().getLESSGTTerminalRuleCall_1_0_5(), null); 
+    }
+)
+    { 
+        currentNode=createCompositeNode(grammarAccess.getRelationAccess().getArithmetic_expressionParserRuleCall_1_1(), currentNode); 
+    }
+    this_arithmetic_expression_7=rulearithmetic_expression    {
+		$current.merge(this_arithmetic_expression_7);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulearithmetic_expression
+entryRulearithmetic_expression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getArithmetic_expressionRule(), currentNode); } 
+	 iv_rulearithmetic_expression=rulearithmetic_expression 
+	 { $current=$iv_rulearithmetic_expression.current.getText(); }  
+	 EOF 
+;
+
+// Rule arithmetic_expression
+rulearithmetic_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArithmetic_expressionAccess().getUnary_arithmetic_expressionParserRuleCall_0(), currentNode); 
+    }
+    this_unary_arithmetic_expression_0=ruleunary_arithmetic_expression    {
+		$current.merge(this_unary_arithmetic_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+((    this_PLUS_1=RULE_PLUS    {
+		$current.merge(this_PLUS_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArithmetic_expressionAccess().getPLUSTerminalRuleCall_1_0_0(), null); 
+    }
+
+    |    this_MINUS_2=RULE_MINUS    {
+		$current.merge(this_MINUS_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArithmetic_expressionAccess().getMINUSTerminalRuleCall_1_0_1(), null); 
+    }
+
+    |    this_PLUS_EW_3=RULE_PLUS_EW    {
+		$current.merge(this_PLUS_EW_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArithmetic_expressionAccess().getPLUS_EWTerminalRuleCall_1_0_2(), null); 
+    }
+
+    |    this_MINUS_EW_4=RULE_MINUS_EW    {
+		$current.merge(this_MINUS_EW_4);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArithmetic_expressionAccess().getMINUS_EWTerminalRuleCall_1_0_3(), null); 
+    }
+)
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArithmetic_expressionAccess().getTermParserRuleCall_1_1(), currentNode); 
+    }
+    this_term_5=ruleterm    {
+		$current.merge(this_term_5);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRuleunary_arithmetic_expression
+entryRuleunary_arithmetic_expression returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getUnary_arithmetic_expressionRule(), currentNode); } 
+	 iv_ruleunary_arithmetic_expression=ruleunary_arithmetic_expression 
+	 { $current=$iv_ruleunary_arithmetic_expression.current.getText(); }  
+	 EOF 
+;
+
+// Rule unary_arithmetic_expression
+ruleunary_arithmetic_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((    this_PLUS_0=RULE_PLUS    {
+		$current.merge(this_PLUS_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getPLUSTerminalRuleCall_0_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_0_1(), currentNode); 
+    }
+    this_term_1=ruleterm    {
+		$current.merge(this_term_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    |(    this_MINUS_2=RULE_MINUS    {
+		$current.merge(this_MINUS_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getMINUSTerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_1_1(), currentNode); 
+    }
+    this_term_3=ruleterm    {
+		$current.merge(this_term_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    |(    this_PLUS_EW_4=RULE_PLUS_EW    {
+		$current.merge(this_PLUS_EW_4);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getPLUS_EWTerminalRuleCall_2_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_2_1(), currentNode); 
+    }
+    this_term_5=ruleterm    {
+		$current.merge(this_term_5);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    |(    this_MINUS_EW_6=RULE_MINUS_EW    {
+		$current.merge(this_MINUS_EW_6);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getMINUS_EWTerminalRuleCall_3_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_3_1(), currentNode); 
+    }
+    this_term_7=ruleterm    {
+		$current.merge(this_term_7);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_4(), currentNode); 
+    }
+    this_term_8=ruleterm    {
+		$current.merge(this_term_8);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleterm
+entryRuleterm returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getTermRule(), currentNode); } 
+	 iv_ruleterm=ruleterm 
+	 { $current=$iv_ruleterm.current.getText(); }  
+	 EOF 
+;
+
+// Rule term
+ruleterm returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getTermAccess().getFactorParserRuleCall_0(), currentNode); 
+    }
+    this_factor_0=rulefactor    {
+		$current.merge(this_factor_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+((    this_STAR_1=RULE_STAR    {
+		$current.merge(this_STAR_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getTermAccess().getSTARTerminalRuleCall_1_0_0(), null); 
+    }
+
+    |    this_SLASH_2=RULE_SLASH    {
+		$current.merge(this_SLASH_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getTermAccess().getSLASHTerminalRuleCall_1_0_1(), null); 
+    }
+
+    |    this_STAR_EW_3=RULE_STAR_EW    {
+		$current.merge(this_STAR_EW_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getTermAccess().getSTAR_EWTerminalRuleCall_1_0_2(), null); 
+    }
+
+    |    this_SLASH_EW_4=RULE_SLASH_EW    {
+		$current.merge(this_SLASH_EW_4);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getTermAccess().getSLASH_EWTerminalRuleCall_1_0_3(), null); 
+    }
+)
+    { 
+        currentNode=createCompositeNode(grammarAccess.getTermAccess().getFactorParserRuleCall_1_1(), currentNode); 
+    }
+    this_factor_5=rulefactor    {
+		$current.merge(this_factor_5);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRulefactor
+entryRulefactor returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFactorRule(), currentNode); } 
+	 iv_rulefactor=rulefactor 
+	 { $current=$iv_rulefactor.current.getText(); }  
+	 EOF 
+;
+
+// Rule factor
+rulefactor returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFactorAccess().getPrimaryParserRuleCall_0(), currentNode); 
+    }
+    this_primary_0=ruleprimary    {
+		$current.merge(this_primary_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+((    this_POWER_1=RULE_POWER    {
+		$current.merge(this_POWER_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFactorAccess().getPOWERTerminalRuleCall_1_0_0(), null); 
+    }
+
+    |    this_POWER_EW_2=RULE_POWER_EW    {
+		$current.merge(this_POWER_EW_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFactorAccess().getPOWER_EWTerminalRuleCall_1_0_1(), null); 
+    }
+)
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFactorAccess().getPrimaryParserRuleCall_1_1(), currentNode); 
+    }
+    this_primary_3=ruleprimary    {
+		$current.merge(this_primary_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRuleprimary
+entryRuleprimary returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getPrimaryRule(), currentNode); } 
+	 iv_ruleprimary=ruleprimary 
+	 { $current=$iv_ruleprimary.current.getText(); }  
+	 EOF 
+;
+
+// Rule primary
+ruleprimary returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_UNSIGNED_INTEGER_0=RULE_UNSIGNED_INTEGER    {
+		$current.merge(this_UNSIGNED_INTEGER_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getUNSIGNED_INTEGERTerminalRuleCall_0(), null); 
+    }
+
+    |    this_UNSIGNED_REAL_1=RULE_UNSIGNED_REAL    {
+		$current.merge(this_UNSIGNED_REAL_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getUNSIGNED_REALTerminalRuleCall_1(), null); 
+    }
+
+    |    this_STRING_2=RULE_STRING    {
+		$current.merge(this_STRING_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getSTRINGTerminalRuleCall_2(), null); 
+    }
+
+    |
+	kw='false' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getPrimaryAccess().getFalseKeyword_3(), null); 
+    }
+
+    |
+	kw='true' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getPrimaryAccess().getTrueKeyword_4(), null); 
+    }
+
+    |
+    { 
+        currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getComponent_reference__function_callParserRuleCall_5(), currentNode); 
+    }
+    this_component_reference__function_call_5=rulecomponent_reference__function_call    {
+		$current.merge(this_component_reference__function_call_5);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+    |(
+	kw='der' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getPrimaryAccess().getDerKeyword_6_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getFunction_callParserRuleCall_6_1(), currentNode); 
+    }
+    this_function_call_7=rulefunction_call    {
+		$current.merge(this_function_call_7);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    |(    this_LPAR_8=RULE_LPAR    {
+		$current.merge(this_LPAR_8);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getLPARTerminalRuleCall_7_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getExpression_listParserRuleCall_7_1(), currentNode); 
+    }
+    this_expression_list_9=ruleexpression_list    {
+		$current.merge(this_expression_list_9);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+    this_RPAR_10=RULE_RPAR    {
+		$current.merge(this_RPAR_10);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getRPARTerminalRuleCall_7_2(), null); 
+    }
+)
+    |(    this_LBRACK_11=RULE_LBRACK    {
+		$current.merge(this_LBRACK_11);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getLBRACKTerminalRuleCall_8_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getExpression_listParserRuleCall_8_1(), currentNode); 
+    }
+    this_expression_list_12=ruleexpression_list    {
+		$current.merge(this_expression_list_12);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_SEMICOLON_13=RULE_SEMICOLON    {
+		$current.merge(this_SEMICOLON_13);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getSEMICOLONTerminalRuleCall_8_2_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getExpression_listParserRuleCall_8_2_1(), currentNode); 
+    }
+    this_expression_list_14=ruleexpression_list    {
+		$current.merge(this_expression_list_14);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*    this_RBRACK_15=RULE_RBRACK    {
+		$current.merge(this_RBRACK_15);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getRBRACKTerminalRuleCall_8_3(), null); 
+    }
+)
+    |(    this_LBRACE_16=RULE_LBRACE    {
+		$current.merge(this_LBRACE_16);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getLBRACETerminalRuleCall_9_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getFor_or_expression_listParserRuleCall_9_1(), currentNode); 
+    }
+    this_for_or_expression_list_17=rulefor_or_expression_list    {
+		$current.merge(this_for_or_expression_list_17);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+    this_RBRACE_18=RULE_RBRACE    {
+		$current.merge(this_RBRACE_18);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getPrimaryAccess().getRBRACETerminalRuleCall_9_2(), null); 
+    }
+)
+    |
+	kw='end' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getPrimaryAccess().getEndKeyword_10(), null); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRulecomponent_reference__function_call
+entryRulecomponent_reference__function_call returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getComponent_reference__function_callRule(), currentNode); } 
+	 iv_rulecomponent_reference__function_call=rulecomponent_reference__function_call 
+	 { $current=$iv_rulecomponent_reference__function_call.current.getText(); }  
+	 EOF 
+;
+
+// Rule component_reference__function_call
+rulecomponent_reference__function_call returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((
+    { 
+        currentNode=createCompositeNode(grammarAccess.getComponent_reference__function_callAccess().getComponent_referenceParserRuleCall_0_0(), currentNode); 
+    }
+    this_component_reference_0=rulecomponent_reference    {
+		$current.merge(this_component_reference_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getComponent_reference__function_callAccess().getFunction_callParserRuleCall_0_1(), currentNode); 
+    }
+    this_function_call_1=rulefunction_call    {
+		$current.merge(this_function_call_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    |(
+	kw='initial' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getComponent_reference__function_callAccess().getInitialKeyword_1_0(), null); 
+    }
+    this_LPAR_3=RULE_LPAR    {
+		$current.merge(this_LPAR_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getComponent_reference__function_callAccess().getLPARTerminalRuleCall_1_1(), null); 
+    }
+    this_RPAR_4=RULE_RPAR    {
+		$current.merge(this_RPAR_4);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getComponent_reference__function_callAccess().getRPARTerminalRuleCall_1_2(), null); 
+    }
+))
+    ;
+
+
+
+
+
+// Entry rule entryRulename_path
+entryRulename_path returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getName_pathRule(), currentNode); } 
+	 iv_rulename_path=rulename_path 
+	 { $current=$iv_rulename_path.current.getText(); }  
+	 EOF 
+;
+
+// Rule name_path
+rulename_path returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_pathAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+
+    |(    this_IDENT_1=RULE_IDENT    {
+		$current.merge(this_IDENT_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_pathAccess().getIDENTTerminalRuleCall_1_0(), null); 
+    }
+    this_DOT_2=RULE_DOT    {
+		$current.merge(this_DOT_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_pathAccess().getDOTTerminalRuleCall_1_1(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getName_pathAccess().getName_pathParserRuleCall_1_2(), currentNode); 
+    }
+    this_name_path_3=rulename_path    {
+		$current.merge(this_name_path_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+))
+    ;
+
+
+
+
+
+// Entry rule entryRulename_path_star
+entryRulename_path_star returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getName_path_starRule(), currentNode); } 
+	 iv_rulename_path_star=rulename_path_star 
+	 { $current=$iv_rulename_path_star.current.getText(); }  
+	 EOF 
+;
+
+// Rule name_path_star
+rulename_path_star returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_path_starAccess().getIDENTTerminalRuleCall_0_0(), null); 
+    }
+(    this_STAR_EW_1=RULE_STAR_EW    {
+		$current.merge(this_STAR_EW_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_path_starAccess().getSTAR_EWTerminalRuleCall_0_1(), null); 
+    }
+)?)
+    |(    this_IDENT_2=RULE_IDENT    {
+		$current.merge(this_IDENT_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_path_starAccess().getIDENTTerminalRuleCall_1_0(), null); 
+    }
+    this_DOT_3=RULE_DOT    {
+		$current.merge(this_DOT_3);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getName_path_starAccess().getDOTTerminalRuleCall_1_1(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getName_path_starAccess().getName_path_starParserRuleCall_1_2(), currentNode); 
+    }
+    this_name_path_star_4=rulename_path_star    {
+		$current.merge(this_name_path_star_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+))
+    ;
+
+
+
+
+
+// Entry rule entryRulecomponent_reference
+entryRulecomponent_reference returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getComponent_referenceRule(), currentNode); } 
+	 iv_rulecomponent_reference=rulecomponent_reference 
+	 { $current=$iv_rulecomponent_reference.current.getText(); }  
+	 EOF 
+;
+
+// Rule component_reference
+rulecomponent_reference returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getComponent_referenceAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getComponent_referenceAccess().getArray_subscriptsParserRuleCall_1(), currentNode); 
+    }
+    this_array_subscripts_1=rulearray_subscripts    {
+		$current.merge(this_array_subscripts_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?(    this_DOT_2=RULE_DOT    {
+		$current.merge(this_DOT_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getComponent_referenceAccess().getDOTTerminalRuleCall_2_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getComponent_referenceAccess().getComponent_referenceParserRuleCall_2_1(), currentNode); 
+    }
+    this_component_reference_3=rulecomponent_reference    {
+		$current.merge(this_component_reference_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulefunction_call
+entryRulefunction_call returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFunction_callRule(), currentNode); } 
+	 iv_rulefunction_call=rulefunction_call 
+	 { $current=$iv_rulefunction_call.current.getText(); }  
+	 EOF 
+;
+
+// Rule function_call
+rulefunction_call returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_LPAR_0=RULE_LPAR    {
+		$current.merge(this_LPAR_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFunction_callAccess().getLPARTerminalRuleCall_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFunction_callAccess().getFunction_argumentsParserRuleCall_1(), currentNode); 
+    }
+    this_function_arguments_1=rulefunction_arguments    {
+		$current.merge(this_function_arguments_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+    this_RPAR_2=RULE_RPAR    {
+		$current.merge(this_RPAR_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFunction_callAccess().getRPARTerminalRuleCall_2(), null); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRulefunction_arguments
+entryRulefunction_arguments returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFunction_argumentsRule(), currentNode); } 
+	 iv_rulefunction_arguments=rulefunction_arguments 
+	 { $current=$iv_rulefunction_arguments.current.getText(); }  
+	 EOF 
+;
+
+// Rule function_arguments
+rulefunction_arguments returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+((
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFunction_argumentsAccess().getFor_or_expression_listParserRuleCall_0(), currentNode); 
+    }
+    this_for_or_expression_list_0=rulefor_or_expression_list    {
+		$current.merge(this_for_or_expression_list_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFunction_argumentsAccess().getNamed_argumentsParserRuleCall_1(), currentNode); 
+    }
+    this_named_arguments_1=rulenamed_arguments    {
+		$current.merge(this_named_arguments_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulefor_or_expression_list
+entryRulefor_or_expression_list returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFor_or_expression_listRule(), currentNode); } 
+	 iv_rulefor_or_expression_list=rulefor_or_expression_list 
+	 { $current=$iv_rulefor_or_expression_list.current.getText(); }  
+	 EOF 
+;
+
+// Rule for_or_expression_list
+rulefor_or_expression_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_or_expression_listAccess().getExpressionParserRuleCall_0(), currentNode); 
+    }
+    this_expression_0=ruleexpression    {
+		$current.merge(this_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+((    this_COMMA_1=RULE_COMMA    {
+		$current.merge(this_COMMA_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFor_or_expression_listAccess().getCOMMATerminalRuleCall_1_0_0(), null); 
+    }
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_or_expression_listAccess().getFor_or_expression_list2ParserRuleCall_1_0_1(), currentNode); 
+    }
+    this_for_or_expression_list2_2=rulefor_or_expression_list2    {
+		$current.merge(this_for_or_expression_list2_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    |(
+	kw='for' 
+    {
+        $current.merge(kw);
+        createLeafNode(grammarAccess.getFor_or_expression_listAccess().getForKeyword_1_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_or_expression_listAccess().getFor_indicesParserRuleCall_1_1_1(), currentNode); 
+    }
+    this_for_indices_4=rulefor_indices    {
+		$current.merge(this_for_indices_4);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+))?)
+    ;
+
+
+
+
+
+// Entry rule entryRulefor_or_expression_list2
+entryRulefor_or_expression_list2 returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getFor_or_expression_list2Rule(), currentNode); } 
+	 iv_rulefor_or_expression_list2=rulefor_or_expression_list2 
+	 { $current=$iv_rulefor_or_expression_list2.current.getText(); }  
+	 EOF 
+;
+
+// Rule for_or_expression_list2
+rulefor_or_expression_list2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_or_expression_list2Access().getExpressionParserRuleCall_0(), currentNode); 
+    }
+    this_expression_0=ruleexpression    {
+		$current.merge(this_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COMMA_1=RULE_COMMA    {
+		$current.merge(this_COMMA_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getFor_or_expression_list2Access().getCOMMATerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getFor_or_expression_list2Access().getFor_or_expression_list2ParserRuleCall_1_1(), currentNode); 
+    }
+    this_for_or_expression_list2_2=rulefor_or_expression_list2    {
+		$current.merge(this_for_or_expression_list2_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulenamed_arguments
+entryRulenamed_arguments returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getNamed_argumentsRule(), currentNode); } 
+	 iv_rulenamed_arguments=rulenamed_arguments 
+	 { $current=$iv_rulenamed_arguments.current.getText(); }  
+	 EOF 
+;
+
+// Rule named_arguments
+rulenamed_arguments returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getNamed_argumentsAccess().getNamed_arguments2ParserRuleCall(), currentNode); 
+    }
+    this_named_arguments2_0=rulenamed_arguments2    {
+		$current.merge(this_named_arguments2_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+    ;
+
+
+
+
+
+// Entry rule entryRulenamed_arguments2
+entryRulenamed_arguments2 returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getNamed_arguments2Rule(), currentNode); } 
+	 iv_rulenamed_arguments2=rulenamed_arguments2 
+	 { $current=$iv_rulenamed_arguments2.current.getText(); }  
+	 EOF 
+;
+
+// Rule named_arguments2
+rulenamed_arguments2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getNamed_arguments2Access().getNamed_argumentParserRuleCall_0(), currentNode); 
+    }
+    this_named_argument_0=rulenamed_argument    {
+		$current.merge(this_named_argument_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COMMA_1=RULE_COMMA    {
+		$current.merge(this_COMMA_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getNamed_arguments2Access().getCOMMATerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getNamed_arguments2Access().getNamed_argumentParserRuleCall_1_1(), currentNode); 
+    }
+    this_named_argument_2=rulenamed_argument    {
+		$current.merge(this_named_argument_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRulenamed_argument
+entryRulenamed_argument returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getNamed_argumentRule(), currentNode); } 
+	 iv_rulenamed_argument=rulenamed_argument 
+	 { $current=$iv_rulenamed_argument.current.getText(); }  
+	 EOF 
+;
+
+// Rule named_argument
+rulenamed_argument returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_IDENT_0=RULE_IDENT    {
+		$current.merge(this_IDENT_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getNamed_argumentAccess().getIDENTTerminalRuleCall_0(), null); 
+    }
+    this_EQUALS_1=RULE_EQUALS    {
+		$current.merge(this_EQUALS_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getNamed_argumentAccess().getEQUALSTerminalRuleCall_1(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getNamed_argumentAccess().getExpressionParserRuleCall_2(), currentNode); 
+    }
+    this_expression_2=ruleexpression    {
+		$current.merge(this_expression_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleexpression_list
+entryRuleexpression_list returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getExpression_listRule(), currentNode); } 
+	 iv_ruleexpression_list=ruleexpression_list 
+	 { $current=$iv_ruleexpression_list.current.getText(); }  
+	 EOF 
+;
+
+// Rule expression_list
+ruleexpression_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExpression_listAccess().getExpression_list2ParserRuleCall(), currentNode); 
+    }
+    this_expression_list2_0=ruleexpression_list2    {
+		$current.merge(this_expression_list2_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+    ;
+
+
+
+
+
+// Entry rule entryRuleexpression_list2
+entryRuleexpression_list2 returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getExpression_list2Rule(), currentNode); } 
+	 iv_ruleexpression_list2=ruleexpression_list2 
+	 { $current=$iv_ruleexpression_list2.current.getText(); }  
+	 EOF 
+;
+
+// Rule expression_list2
+ruleexpression_list2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExpression_list2Access().getExpressionParserRuleCall_0(), currentNode); 
+    }
+    this_expression_0=ruleexpression    {
+		$current.merge(this_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COMMA_1=RULE_COMMA    {
+		$current.merge(this_COMMA_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getExpression_list2Access().getCOMMATerminalRuleCall_1_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getExpression_list2Access().getExpression_list2ParserRuleCall_1_1(), currentNode); 
+    }
+    this_expression_list2_2=ruleexpression_list2    {
+		$current.merge(this_expression_list2_2);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)?)
+    ;
+
+
+
+
+
+// Entry rule entryRulearray_subscripts
+entryRulearray_subscripts returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getArray_subscriptsRule(), currentNode); } 
+	 iv_rulearray_subscripts=rulearray_subscripts 
+	 { $current=$iv_rulearray_subscripts.current.getText(); }  
+	 EOF 
+;
+
+// Rule array_subscripts
+rulearray_subscripts returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_LBRACK_0=RULE_LBRACK    {
+		$current.merge(this_LBRACK_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArray_subscriptsAccess().getLBRACKTerminalRuleCall_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArray_subscriptsAccess().getSubscriptParserRuleCall_1(), currentNode); 
+    }
+    this_subscript_1=rulesubscript    {
+		$current.merge(this_subscript_1);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+(    this_COMMA_2=RULE_COMMA    {
+		$current.merge(this_COMMA_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArray_subscriptsAccess().getCOMMATerminalRuleCall_2_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getArray_subscriptsAccess().getSubscriptParserRuleCall_2_1(), currentNode); 
+    }
+    this_subscript_3=rulesubscript    {
+		$current.merge(this_subscript_3);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+)*    this_RBRACK_4=RULE_RBRACK    {
+		$current.merge(this_RBRACK_4);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getArray_subscriptsAccess().getRBRACKTerminalRuleCall_3(), null); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRulesubscript
+entryRulesubscript returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getSubscriptRule(), currentNode); } 
+	 iv_rulesubscript=rulesubscript 
+	 { $current=$iv_rulesubscript.current.getText(); }  
+	 EOF 
+;
+
+// Rule subscript
+rulesubscript returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(
+    { 
+        currentNode=createCompositeNode(grammarAccess.getSubscriptAccess().getExpressionParserRuleCall_0(), currentNode); 
+    }
+    this_expression_0=ruleexpression    {
+		$current.merge(this_expression_0);
+    }
+
+    { 
+        currentNode = currentNode.getParent();
+    }
+
+    |    this_COLON_1=RULE_COLON    {
+		$current.merge(this_COLON_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getSubscriptAccess().getCOLONTerminalRuleCall_1(), null); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRulecomment
+entryRulecomment returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getCommentRule(), currentNode); }
+	 iv_rulecomment=rulecomment 
+	 { $current=$iv_rulecomment.current; } 
+	 EOF 
+;
+
+// Rule comment
+rulecomment returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getCommentAccess().getStringString_commentParserRuleCall_0_0(), currentNode); 
+	    }
+	    lv_string_0=rulestring_comment 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getCommentRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "string", lv_string_0, "string_comment", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?(	
+	
+	    
+	    { 
+	        currentNode=createCompositeNode(grammarAccess.getCommentAccess().getAnnotationAnnotationParserRuleCall_1_0(), currentNode); 
+	    }
+	    lv_annotation_1=ruleannotation 
+	    {
+	        if ($current==null) {
+	            $current = factory.create(grammarAccess.getCommentRule().getType().getClassifier());
+	            associateNodeWithAstElement(currentNode.getParent(), $current);
+	        }
+	        
+	        try {
+	       		set($current, "annotation", lv_annotation_1, "annotation", currentNode);
+	        } catch (ValueConverterException vce) {
+				handleValueConverterException(vce);
+	        }
+	        currentNode = currentNode.getParent();
+	    }
+	
+)?);
+
+
+
+
+
+// Entry rule entryRulestring_comment
+entryRulestring_comment returns [String current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getString_commentRule(), currentNode); } 
+	 iv_rulestring_comment=rulestring_comment 
+	 { $current=$iv_rulestring_comment.current.getText(); }  
+	 EOF 
+;
+
+// Rule string_comment
+rulestring_comment returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+	    lastConsumedNode = currentNode;
+	    lastConsumedDatatypeToken = $current;
+    }:
+(    this_STRING_0=RULE_STRING    {
+		$current.merge(this_STRING_0);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getString_commentAccess().getSTRINGTerminalRuleCall_0(), null); 
+    }
+(    this_PLUS_1=RULE_PLUS    {
+		$current.merge(this_PLUS_1);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getString_commentAccess().getPLUSTerminalRuleCall_1_0(), null); 
+    }
+    this_STRING_2=RULE_STRING    {
+		$current.merge(this_STRING_2);
+    }
+
+    { 
+    createLeafNode(grammarAccess.getString_commentAccess().getSTRINGTerminalRuleCall_1_1(), null); 
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRuleannotation
+entryRuleannotation returns [EObject current=null] :
+	{ currentNode = createCompositeNode(grammarAccess.getAnnotationRule(), currentNode); }
+	 iv_ruleannotation=ruleannotation 
+	 { $current=$iv_ruleannotation.current; } 
+	 EOF 
+;
+
+// Rule annotation
+ruleannotation returns [EObject current=null] 
+    @init { EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+    }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+('annotation' 
+    {
+        createLeafNode(grammarAccess.getAnnotationAccess().getAnnotationKeyword_0(), null); 
+    }
+
+    { 
+        currentNode=createCompositeNode(grammarAccess.getAnnotationAccess().getClass_modificationParserRuleCall_1(), currentNode); 
+    }
+    this_class_modification_1=ruleclass_modification
+    { 
+        $current = $this_class_modification_1.current; 
+        currentNode = currentNode.getParent();
+    }
+);
+
+
+
+
+
+// Rule ClassType
+ruleClassType returns [Enumerator current=null] 
+    @init { setCurrentLookahead(); resetLookahead(); }
+    @after { resetLookahead(); 
+    	lastConsumedNode = currentNode;
+    }:
+((	'class' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getCLASSEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getCLASSEnumLiteralDeclaration_0(), null); 
+    }
+)
+    |(	'model' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getMODELEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getMODELEnumLiteralDeclaration_1(), null); 
+    }
+)
+    |(	'record' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getRECORDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getRECORDEnumLiteralDeclaration_2(), null); 
+    }
+)
+    |(	'block' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getBLOCKEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getBLOCKEnumLiteralDeclaration_3(), null); 
+    }
+)
+    |(	'connector' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getCONNECTOREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getCONNECTOREnumLiteralDeclaration_4(), null); 
+    }
+)
+    |(	'type' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getTYPEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getTYPEEnumLiteralDeclaration_5(), null); 
+    }
+)
+    |(	'package' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getPACKAGEEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getPACKAGEEnumLiteralDeclaration_6(), null); 
+    }
+)
+    |(	'function' 
+	{
+        $current = grammarAccess.getClassTypeAccess().getFUNCTIONEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
+        createLeafNode(grammarAccess.getClassTypeAccess().getFUNCTIONEnumLiteralDeclaration_7(), null); 
+    }
+));
+
+
+
+RULE_DOT : '.';
+
+RULE_LPAR : '(';
+
+RULE_RPAR : ')';
+
+RULE_LBRACK : '[';
+
+RULE_RBRACK : ']';
+
+RULE_LBRACE : '{';
+
+RULE_RBRACE : '}';
+
+RULE_EQUALS : '=';
+
+RULE_ASSIGN : ':=';
+
+RULE_COMMA : ',';
+
+RULE_COLON : ':';
+
+RULE_SEMICOLON : ';';
+
+RULE_PLUS_EW : '.+';
+
+RULE_MINUS_EW : '.-';
+
+RULE_STAR_EW : '.*';
+
+RULE_SLASH_EW : './';
+
+RULE_POWER_EW : '.^';
+
+RULE_STAR : '*' '.'?;
+
+RULE_MINUS : '-' '.'?;
+
+RULE_PLUS : '+' ('.'|'&')?;
+
+RULE_LESS : '<' '.'?;
+
+RULE_LESSEQ : '<=' '.'?;
+
+RULE_LESSGT : ('!=' '.'?|'<>' '.'?);
+
+RULE_GREATER : '>' '.'?;
+
+RULE_GREATEREQ : '>=' '.'?;
+
+RULE_EQEQ : '==' ('.'|'&')?;
+
+RULE_POWER : '^' '.'?;
+
+RULE_SLASH : '/' '.'?;
+
+RULE_UNSIGNED_REAL : (('0'..'9')+ '.' ('0'..'9')* (('E'|'e') ('+'|'-')? ('0'..'9')+)?|('0'..'9')+ ('E'|'e') ('+'|'-')? ('0'..'9')+);
+
+RULE_UNSIGNED_INTEGER : ('0'..'9')+;
+
+RULE_IDENT : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.tokens
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.tokens	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.tokens	(revision 540)
@@ -0,0 +1,99 @@
+RULE_MINUS_EW=23
+RULE_ID=36
+RULE_GREATER=16
+RULE_SLASH_EW=27
+RULE_RBRACE=35
+RULE_LPAR=7
+RULE_RBRACK=33
+RULE_PLUS_EW=22
+RULE_SEMICOLON=4
+RULE_ANY_OTHER=41
+RULE_STAR_EW=26
+RULE_POWER_EW=29
+RULE_PLUS=20
+RULE_COMMA=8
+RULE_SL_COMMENT=39
+RULE_ML_COMMENT=38
+RULE_ASSIGN=12
+RULE_MINUS=21
+RULE_COLON=9
+RULE_LESSEQ=15
+RULE_STRING=11
+RULE_DOT=13
+RULE_UNSIGNED_INTEGER=30
+RULE_STAR=24
+RULE_LESSGT=19
+RULE_RPAR=10
+RULE_IDENT=5
+RULE_EQEQ=18
+RULE_LBRACK=32
+RULE_INT=37
+RULE_LESS=14
+RULE_LBRACE=34
+RULE_EQUALS=6
+RULE_SLASH=25
+RULE_POWER=28
+RULE_WS=40
+RULE_UNSIGNED_REAL=31
+RULE_GREATEREQ=17
+'end'=48
+'model'=93
+'then'=76
+'type'=97
+'enumeration'=52
+';'=4
+'return'=75
+'encapsulated'=44
+'protected'=55
+'for'=78
+'inner'=57
+'function'=49
+'stream'=63
+'constant'=66
+'loop'=79
+'import'=60
+'elseif'=83
+'true'=90
+'der'=50
+'else'=77
+'final'=43
+'extends'=47
+'and'=87
+'break'=74
+'package'=98
+'flow'=62
+'if'=69
+'not'=88
+'('=7
+'while'=80
+'expandable'=46
+','=8
+'annotation'=91
+'public'=54
+'in'=85
+'input'=67
+'each'=70
+'class'=92
+'outer'=58
+'when'=81
+'equation'=71
+'constrainedby'=61
+'output'=68
+'redeclare'=56
+'overload'=51
+'within'=42
+'elsewhen'=82
+'parameter'=65
+')'=10
+'initial'=73
+'connector'=96
+'block'=95
+'partial'=45
+'algorithm'=72
+'connect'=84
+'false'=89
+'external'=53
+'replaceable'=59
+'or'=86
+'discrete'=64
+'record'=94
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBaseLexer.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBaseLexer.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBaseLexer.java	(revision 540)
@@ -0,0 +1,4130 @@
+package org.modelica.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;
+
+public class InternalModelicaBaseLexer extends Lexer {
+    public static final int RULE_MINUS_EW=23;
+    public static final int RULE_ID=36;
+    public static final int RULE_ANY_OTHER=41;
+    public static final int EOF=-1;
+    public static final int RULE_UNSIGNED_REAL=31;
+    public static final int RULE_GREATER=16;
+    public static final int RULE_SLASH_EW=27;
+    public static final int RULE_RBRACE=35;
+    public static final int RULE_RBRACK=33;
+    public static final int T49=49;
+    public static final int RULE_COMMA=8;
+    public static final int T48=48;
+    public static final int T43=43;
+    public static final int T42=42;
+    public static final int T47=47;
+    public static final int T46=46;
+    public static final int RULE_ML_COMMENT=38;
+    public static final int T45=45;
+    public static final int T44=44;
+    public static final int RULE_MINUS=21;
+    public static final int RULE_STRING=11;
+    public static final int T50=50;
+    public static final int RULE_RPAR=10;
+    public static final int RULE_IDENT=5;
+    public static final int T59=59;
+    public static final int RULE_SLASH=25;
+    public static final int T52=52;
+    public static final int T51=51;
+    public static final int T54=54;
+    public static final int T53=53;
+    public static final int T56=56;
+    public static final int T55=55;
+    public static final int RULE_GREATEREQ=17;
+    public static final int T58=58;
+    public static final int T57=57;
+    public static final int T75=75;
+    public static final int T76=76;
+    public static final int T73=73;
+    public static final int T74=74;
+    public static final int T79=79;
+    public static final int T77=77;
+    public static final int T78=78;
+    public static final int RULE_PLUS_EW=22;
+    public static final int RULE_SEMICOLON=4;
+    public static final int T72=72;
+    public static final int T71=71;
+    public static final int T70=70;
+    public static final int RULE_ASSIGN=12;
+    public static final int T62=62;
+    public static final int T63=63;
+    public static final int RULE_LESSEQ=15;
+    public static final int T64=64;
+    public static final int T65=65;
+    public static final int T66=66;
+    public static final int RULE_DOT=13;
+    public static final int T67=67;
+    public static final int RULE_UNSIGNED_INTEGER=30;
+    public static final int T68=68;
+    public static final int T69=69;
+    public static final int RULE_LBRACK=32;
+    public static final int RULE_INT=37;
+    public static final int RULE_LBRACE=34;
+    public static final int RULE_POWER=28;
+    public static final int T61=61;
+    public static final int T60=60;
+    public static final int T97=97;
+    public static final int T98=98;
+    public static final int T95=95;
+    public static final int T96=96;
+    public static final int RULE_LPAR=7;
+    public static final int RULE_STAR_EW=26;
+    public static final int RULE_POWER_EW=29;
+    public static final int RULE_PLUS=20;
+    public static final int T94=94;
+    public static final int Tokens=99;
+    public static final int T93=93;
+    public static final int RULE_SL_COMMENT=39;
+    public static final int T92=92;
+    public static final int T91=91;
+    public static final int T90=90;
+    public static final int T88=88;
+    public static final int T89=89;
+    public static final int RULE_COLON=9;
+    public static final int T84=84;
+    public static final int T85=85;
+    public static final int T86=86;
+    public static final int RULE_LESSGT=19;
+    public static final int RULE_STAR=24;
+    public static final int T87=87;
+    public static final int RULE_EQEQ=18;
+    public static final int RULE_LESS=14;
+    public static final int RULE_EQUALS=6;
+    public static final int RULE_WS=40;
+    public static final int T81=81;
+    public static final int T80=80;
+    public static final int T83=83;
+    public static final int T82=82;
+    public InternalModelicaBaseLexer() {;} 
+    public InternalModelicaBaseLexer(CharStream input) {
+        super(input);
+    }
+    public String getGrammarFileName() { return "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g"; }
+
+    // $ANTLR start T42
+    public final void mT42() throws RecognitionException {
+        try {
+            int _type = T42;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:10:5: ( 'within' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:10:7: 'within'
+            {
+            match("within"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T42
+
+    // $ANTLR start T43
+    public final void mT43() throws RecognitionException {
+        try {
+            int _type = T43;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:11:5: ( 'final' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:11:7: 'final'
+            {
+            match("final"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T43
+
+    // $ANTLR start T44
+    public final void mT44() throws RecognitionException {
+        try {
+            int _type = T44;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:12:5: ( 'encapsulated' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:12:7: 'encapsulated'
+            {
+            match("encapsulated"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T44
+
+    // $ANTLR start T45
+    public final void mT45() throws RecognitionException {
+        try {
+            int _type = T45;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:13:5: ( 'partial' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:13:7: 'partial'
+            {
+            match("partial"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T45
+
+    // $ANTLR start T46
+    public final void mT46() throws RecognitionException {
+        try {
+            int _type = T46;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:14:5: ( 'expandable' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:14:7: 'expandable'
+            {
+            match("expandable"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T46
+
+    // $ANTLR start T47
+    public final void mT47() throws RecognitionException {
+        try {
+            int _type = T47;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:15:5: ( 'extends' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:15:7: 'extends'
+            {
+            match("extends"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T47
+
+    // $ANTLR start T48
+    public final void mT48() throws RecognitionException {
+        try {
+            int _type = T48;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:16:5: ( 'end' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:16:7: 'end'
+            {
+            match("end"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T48
+
+    // $ANTLR start T49
+    public final void mT49() throws RecognitionException {
+        try {
+            int _type = T49;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:17:5: ( 'function' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:17:7: 'function'
+            {
+            match("function"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T49
+
+    // $ANTLR start T50
+    public final void mT50() throws RecognitionException {
+        try {
+            int _type = T50;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:18:5: ( 'der' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:18:7: 'der'
+            {
+            match("der"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T50
+
+    // $ANTLR start T51
+    public final void mT51() throws RecognitionException {
+        try {
+            int _type = T51;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:19:5: ( 'overload' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:19:7: 'overload'
+            {
+            match("overload"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T51
+
+    // $ANTLR start T52
+    public final void mT52() throws RecognitionException {
+        try {
+            int _type = T52;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:20:5: ( 'enumeration' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:20:7: 'enumeration'
+            {
+            match("enumeration"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T52
+
+    // $ANTLR start T53
+    public final void mT53() throws RecognitionException {
+        try {
+            int _type = T53;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:21:5: ( 'external' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:21:7: 'external'
+            {
+            match("external"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T53
+
+    // $ANTLR start T54
+    public final void mT54() throws RecognitionException {
+        try {
+            int _type = T54;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:22:5: ( 'public' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:22:7: 'public'
+            {
+            match("public"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T54
+
+    // $ANTLR start T55
+    public final void mT55() throws RecognitionException {
+        try {
+            int _type = T55;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:23:5: ( 'protected' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:23:7: 'protected'
+            {
+            match("protected"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T55
+
+    // $ANTLR start T56
+    public final void mT56() throws RecognitionException {
+        try {
+            int _type = T56;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:24:5: ( 'redeclare' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:24:7: 'redeclare'
+            {
+            match("redeclare"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T56
+
+    // $ANTLR start T57
+    public final void mT57() throws RecognitionException {
+        try {
+            int _type = T57;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:25:5: ( 'inner' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:25:7: 'inner'
+            {
+            match("inner"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T57
+
+    // $ANTLR start T58
+    public final void mT58() throws RecognitionException {
+        try {
+            int _type = T58;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:26:5: ( 'outer' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:26:7: 'outer'
+            {
+            match("outer"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T58
+
+    // $ANTLR start T59
+    public final void mT59() throws RecognitionException {
+        try {
+            int _type = T59;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:27:5: ( 'replaceable' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:27:7: 'replaceable'
+            {
+            match("replaceable"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T59
+
+    // $ANTLR start T60
+    public final void mT60() throws RecognitionException {
+        try {
+            int _type = T60;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:28:5: ( 'import' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:28:7: 'import'
+            {
+            match("import"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T60
+
+    // $ANTLR start T61
+    public final void mT61() throws RecognitionException {
+        try {
+            int _type = T61;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:29:5: ( 'constrainedby' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:29:7: 'constrainedby'
+            {
+            match("constrainedby"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T61
+
+    // $ANTLR start T62
+    public final void mT62() throws RecognitionException {
+        try {
+            int _type = T62;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:30:5: ( 'flow' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:30:7: 'flow'
+            {
+            match("flow"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T62
+
+    // $ANTLR start T63
+    public final void mT63() throws RecognitionException {
+        try {
+            int _type = T63;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:31:5: ( 'stream' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:31:7: 'stream'
+            {
+            match("stream"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T63
+
+    // $ANTLR start T64
+    public final void mT64() throws RecognitionException {
+        try {
+            int _type = T64;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:32:5: ( 'discrete' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:32:7: 'discrete'
+            {
+            match("discrete"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T64
+
+    // $ANTLR start T65
+    public final void mT65() throws RecognitionException {
+        try {
+            int _type = T65;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:33:5: ( 'parameter' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:33:7: 'parameter'
+            {
+            match("parameter"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T65
+
+    // $ANTLR start T66
+    public final void mT66() throws RecognitionException {
+        try {
+            int _type = T66;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:34:5: ( 'constant' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:34:7: 'constant'
+            {
+            match("constant"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T66
+
+    // $ANTLR start T67
+    public final void mT67() throws RecognitionException {
+        try {
+            int _type = T67;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:35:5: ( 'input' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:35:7: 'input'
+            {
+            match("input"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T67
+
+    // $ANTLR start T68
+    public final void mT68() throws RecognitionException {
+        try {
+            int _type = T68;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:36:5: ( 'output' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:36:7: 'output'
+            {
+            match("output"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T68
+
+    // $ANTLR start T69
+    public final void mT69() throws RecognitionException {
+        try {
+            int _type = T69;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:37:5: ( 'if' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:37:7: 'if'
+            {
+            match("if"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T69
+
+    // $ANTLR start T70
+    public final void mT70() throws RecognitionException {
+        try {
+            int _type = T70;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:38:5: ( 'each' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:38:7: 'each'
+            {
+            match("each"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T70
+
+    // $ANTLR start T71
+    public final void mT71() throws RecognitionException {
+        try {
+            int _type = T71;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:39:5: ( 'equation' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:39:7: 'equation'
+            {
+            match("equation"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T71
+
+    // $ANTLR start T72
+    public final void mT72() throws RecognitionException {
+        try {
+            int _type = T72;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:40:5: ( 'algorithm' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:40:7: 'algorithm'
+            {
+            match("algorithm"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T72
+
+    // $ANTLR start T73
+    public final void mT73() throws RecognitionException {
+        try {
+            int _type = T73;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:41:5: ( 'initial' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:41:7: 'initial'
+            {
+            match("initial"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T73
+
+    // $ANTLR start T74
+    public final void mT74() throws RecognitionException {
+        try {
+            int _type = T74;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:42:5: ( 'break' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:42:7: 'break'
+            {
+            match("break"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T74
+
+    // $ANTLR start T75
+    public final void mT75() throws RecognitionException {
+        try {
+            int _type = T75;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:43:5: ( 'return' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:43:7: 'return'
+            {
+            match("return"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T75
+
+    // $ANTLR start T76
+    public final void mT76() throws RecognitionException {
+        try {
+            int _type = T76;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:44:5: ( 'then' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:44:7: 'then'
+            {
+            match("then"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T76
+
+    // $ANTLR start T77
+    public final void mT77() throws RecognitionException {
+        try {
+            int _type = T77;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:45:5: ( 'else' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:45:7: 'else'
+            {
+            match("else"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T77
+
+    // $ANTLR start T78
+    public final void mT78() throws RecognitionException {
+        try {
+            int _type = T78;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:46:5: ( 'for' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:46:7: 'for'
+            {
+            match("for"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T78
+
+    // $ANTLR start T79
+    public final void mT79() throws RecognitionException {
+        try {
+            int _type = T79;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:47:5: ( 'loop' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:47:7: 'loop'
+            {
+            match("loop"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T79
+
+    // $ANTLR start T80
+    public final void mT80() throws RecognitionException {
+        try {
+            int _type = T80;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:48:5: ( 'while' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:48:7: 'while'
+            {
+            match("while"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T80
+
+    // $ANTLR start T81
+    public final void mT81() throws RecognitionException {
+        try {
+            int _type = T81;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:49:5: ( 'when' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:49:7: 'when'
+            {
+            match("when"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T81
+
+    // $ANTLR start T82
+    public final void mT82() throws RecognitionException {
+        try {
+            int _type = T82;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:50:5: ( 'elsewhen' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:50:7: 'elsewhen'
+            {
+            match("elsewhen"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T82
+
+    // $ANTLR start T83
+    public final void mT83() throws RecognitionException {
+        try {
+            int _type = T83;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:51:5: ( 'elseif' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:51:7: 'elseif'
+            {
+            match("elseif"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T83
+
+    // $ANTLR start T84
+    public final void mT84() throws RecognitionException {
+        try {
+            int _type = T84;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:52:5: ( 'connect' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:52:7: 'connect'
+            {
+            match("connect"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T84
+
+    // $ANTLR start T85
+    public final void mT85() throws RecognitionException {
+        try {
+            int _type = T85;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:53:5: ( 'in' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:53:7: 'in'
+            {
+            match("in"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T85
+
+    // $ANTLR start T86
+    public final void mT86() throws RecognitionException {
+        try {
+            int _type = T86;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:54:5: ( 'or' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:54:7: 'or'
+            {
+            match("or"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T86
+
+    // $ANTLR start T87
+    public final void mT87() throws RecognitionException {
+        try {
+            int _type = T87;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:55:5: ( 'and' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:55:7: 'and'
+            {
+            match("and"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T87
+
+    // $ANTLR start T88
+    public final void mT88() throws RecognitionException {
+        try {
+            int _type = T88;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:56:5: ( 'not' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:56:7: 'not'
+            {
+            match("not"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T88
+
+    // $ANTLR start T89
+    public final void mT89() throws RecognitionException {
+        try {
+            int _type = T89;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:57:5: ( 'false' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:57:7: 'false'
+            {
+            match("false"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T89
+
+    // $ANTLR start T90
+    public final void mT90() throws RecognitionException {
+        try {
+            int _type = T90;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:58:5: ( 'true' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:58:7: 'true'
+            {
+            match("true"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T90
+
+    // $ANTLR start T91
+    public final void mT91() throws RecognitionException {
+        try {
+            int _type = T91;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:59:5: ( 'annotation' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:59:7: 'annotation'
+            {
+            match("annotation"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T91
+
+    // $ANTLR start T92
+    public final void mT92() throws RecognitionException {
+        try {
+            int _type = T92;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:60:5: ( 'class' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:60:7: 'class'
+            {
+            match("class"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T92
+
+    // $ANTLR start T93
+    public final void mT93() throws RecognitionException {
+        try {
+            int _type = T93;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:61:5: ( 'model' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:61:7: 'model'
+            {
+            match("model"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T93
+
+    // $ANTLR start T94
+    public final void mT94() throws RecognitionException {
+        try {
+            int _type = T94;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:62:5: ( 'record' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:62:7: 'record'
+            {
+            match("record"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T94
+
+    // $ANTLR start T95
+    public final void mT95() throws RecognitionException {
+        try {
+            int _type = T95;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:63:5: ( 'block' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:63:7: 'block'
+            {
+            match("block"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T95
+
+    // $ANTLR start T96
+    public final void mT96() throws RecognitionException {
+        try {
+            int _type = T96;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:64:5: ( 'connector' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:64:7: 'connector'
+            {
+            match("connector"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T96
+
+    // $ANTLR start T97
+    public final void mT97() throws RecognitionException {
+        try {
+            int _type = T97;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:65:5: ( 'type' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:65:7: 'type'
+            {
+            match("type"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T97
+
+    // $ANTLR start T98
+    public final void mT98() throws RecognitionException {
+        try {
+            int _type = T98;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:66:5: ( 'package' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:66:7: 'package'
+            {
+            match("package"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T98
+
+    // $ANTLR start RULE_DOT
+    public final void mRULE_DOT() throws RecognitionException {
+        try {
+            int _type = RULE_DOT;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6731:10: ( '.' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6731:12: '.'
+            {
+            match('.'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_DOT
+
+    // $ANTLR start RULE_LPAR
+    public final void mRULE_LPAR() throws RecognitionException {
+        try {
+            int _type = RULE_LPAR;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6733:11: ( '(' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6733:13: '('
+            {
+            match('('); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_LPAR
+
+    // $ANTLR start RULE_RPAR
+    public final void mRULE_RPAR() throws RecognitionException {
+        try {
+            int _type = RULE_RPAR;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6735:11: ( ')' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6735:13: ')'
+            {
+            match(')'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_RPAR
+
+    // $ANTLR start RULE_LBRACK
+    public final void mRULE_LBRACK() throws RecognitionException {
+        try {
+            int _type = RULE_LBRACK;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6737:13: ( '[' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6737:15: '['
+            {
+            match('['); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_LBRACK
+
+    // $ANTLR start RULE_RBRACK
+    public final void mRULE_RBRACK() throws RecognitionException {
+        try {
+            int _type = RULE_RBRACK;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6739:13: ( ']' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6739:15: ']'
+            {
+            match(']'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_RBRACK
+
+    // $ANTLR start RULE_LBRACE
+    public final void mRULE_LBRACE() throws RecognitionException {
+        try {
+            int _type = RULE_LBRACE;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6741:13: ( '{' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6741:15: '{'
+            {
+            match('{'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_LBRACE
+
+    // $ANTLR start RULE_RBRACE
+    public final void mRULE_RBRACE() throws RecognitionException {
+        try {
+            int _type = RULE_RBRACE;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6743:13: ( '}' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6743:15: '}'
+            {
+            match('}'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_RBRACE
+
+    // $ANTLR start RULE_EQUALS
+    public final void mRULE_EQUALS() throws RecognitionException {
+        try {
+            int _type = RULE_EQUALS;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6745:13: ( '=' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6745:15: '='
+            {
+            match('='); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_EQUALS
+
+    // $ANTLR start RULE_ASSIGN
+    public final void mRULE_ASSIGN() throws RecognitionException {
+        try {
+            int _type = RULE_ASSIGN;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6747:13: ( ':=' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6747:15: ':='
+            {
+            match(":="); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ASSIGN
+
+    // $ANTLR start RULE_COMMA
+    public final void mRULE_COMMA() throws RecognitionException {
+        try {
+            int _type = RULE_COMMA;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6749:12: ( ',' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6749:14: ','
+            {
+            match(','); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_COMMA
+
+    // $ANTLR start RULE_COLON
+    public final void mRULE_COLON() throws RecognitionException {
+        try {
+            int _type = RULE_COLON;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6751:12: ( ':' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6751:14: ':'
+            {
+            match(':'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_COLON
+
+    // $ANTLR start RULE_SEMICOLON
+    public final void mRULE_SEMICOLON() throws RecognitionException {
+        try {
+            int _type = RULE_SEMICOLON;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6753:16: ( ';' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6753:18: ';'
+            {
+            match(';'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_SEMICOLON
+
+    // $ANTLR start RULE_PLUS_EW
+    public final void mRULE_PLUS_EW() throws RecognitionException {
+        try {
+            int _type = RULE_PLUS_EW;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6755:14: ( '.+' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6755:16: '.+'
+            {
+            match(".+"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_PLUS_EW
+
+    // $ANTLR start RULE_MINUS_EW
+    public final void mRULE_MINUS_EW() throws RecognitionException {
+        try {
+            int _type = RULE_MINUS_EW;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6757:15: ( '.-' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6757:17: '.-'
+            {
+            match(".-"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_MINUS_EW
+
+    // $ANTLR start RULE_STAR_EW
+    public final void mRULE_STAR_EW() throws RecognitionException {
+        try {
+            int _type = RULE_STAR_EW;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6759:14: ( '.*' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6759:16: '.*'
+            {
+            match(".*"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_STAR_EW
+
+    // $ANTLR start RULE_SLASH_EW
+    public final void mRULE_SLASH_EW() throws RecognitionException {
+        try {
+            int _type = RULE_SLASH_EW;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6761:15: ( './' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6761:17: './'
+            {
+            match("./"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_SLASH_EW
+
+    // $ANTLR start RULE_POWER_EW
+    public final void mRULE_POWER_EW() throws RecognitionException {
+        try {
+            int _type = RULE_POWER_EW;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6763:15: ( '.^' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6763:17: '.^'
+            {
+            match(".^"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_POWER_EW
+
+    // $ANTLR start RULE_STAR
+    public final void mRULE_STAR() throws RecognitionException {
+        try {
+            int _type = RULE_STAR;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6765:11: ( '*' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6765:13: '*' ( '.' )?
+            {
+            match('*'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6765:17: ( '.' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='.') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6765:17: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_STAR
+
+    // $ANTLR start RULE_MINUS
+    public final void mRULE_MINUS() throws RecognitionException {
+        try {
+            int _type = RULE_MINUS;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6767:12: ( '-' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6767:14: '-' ( '.' )?
+            {
+            match('-'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6767:18: ( '.' )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0=='.') ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6767:18: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_MINUS
+
+    // $ANTLR start RULE_PLUS
+    public final void mRULE_PLUS() throws RecognitionException {
+        try {
+            int _type = RULE_PLUS;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6769:11: ( '+' ( '.' | '&' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6769:13: '+' ( '.' | '&' )?
+            {
+            match('+'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6769:17: ( '.' | '&' )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0=='&'||LA3_0=='.') ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:
+                    {
+                    if ( input.LA(1)=='&'||input.LA(1)=='.' ) {
+                        input.consume();
+
+                    }
+                    else {
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recover(mse);    throw mse;
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_PLUS
+
+    // $ANTLR start RULE_LESS
+    public final void mRULE_LESS() throws RecognitionException {
+        try {
+            int _type = RULE_LESS;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6771:11: ( '<' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6771:13: '<' ( '.' )?
+            {
+            match('<'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6771:17: ( '.' )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0=='.') ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6771:17: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_LESS
+
+    // $ANTLR start RULE_LESSEQ
+    public final void mRULE_LESSEQ() throws RecognitionException {
+        try {
+            int _type = RULE_LESSEQ;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6773:13: ( '<=' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6773:15: '<=' ( '.' )?
+            {
+            match("<="); 
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6773:20: ( '.' )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0=='.') ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6773:20: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_LESSEQ
+
+    // $ANTLR start RULE_LESSGT
+    public final void mRULE_LESSGT() throws RecognitionException {
+        try {
+            int _type = RULE_LESSGT;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:13: ( ( '!=' ( '.' )? | '<>' ( '.' )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:15: ( '!=' ( '.' )? | '<>' ( '.' )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:15: ( '!=' ( '.' )? | '<>' ( '.' )? )
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0=='!') ) {
+                alt8=1;
+            }
+            else if ( (LA8_0=='<') ) {
+                alt8=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("6775:15: ( '!=' ( '.' )? | '<>' ( '.' )? )", 8, 0, input);
+
+                throw nvae;
+            }
+            switch (alt8) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:16: '!=' ( '.' )?
+                    {
+                    match("!="); 
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:21: ( '.' )?
+                    int alt6=2;
+                    int LA6_0 = input.LA(1);
+
+                    if ( (LA6_0=='.') ) {
+                        alt6=1;
+                    }
+                    switch (alt6) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:21: '.'
+                            {
+                            match('.'); 
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:26: '<>' ( '.' )?
+                    {
+                    match("<>"); 
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:31: ( '.' )?
+                    int alt7=2;
+                    int LA7_0 = input.LA(1);
+
+                    if ( (LA7_0=='.') ) {
+                        alt7=1;
+                    }
+                    switch (alt7) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6775:31: '.'
+                            {
+                            match('.'); 
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_LESSGT
+
+    // $ANTLR start RULE_GREATER
+    public final void mRULE_GREATER() throws RecognitionException {
+        try {
+            int _type = RULE_GREATER;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6777:14: ( '>' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6777:16: '>' ( '.' )?
+            {
+            match('>'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6777:20: ( '.' )?
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0=='.') ) {
+                alt9=1;
+            }
+            switch (alt9) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6777:20: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_GREATER
+
+    // $ANTLR start RULE_GREATEREQ
+    public final void mRULE_GREATEREQ() throws RecognitionException {
+        try {
+            int _type = RULE_GREATEREQ;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6779:16: ( '>=' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6779:18: '>=' ( '.' )?
+            {
+            match(">="); 
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6779:23: ( '.' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='.') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6779:23: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_GREATEREQ
+
+    // $ANTLR start RULE_EQEQ
+    public final void mRULE_EQEQ() throws RecognitionException {
+        try {
+            int _type = RULE_EQEQ;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6781:11: ( '==' ( '.' | '&' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6781:13: '==' ( '.' | '&' )?
+            {
+            match("=="); 
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6781:18: ( '.' | '&' )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0=='&'||LA11_0=='.') ) {
+                alt11=1;
+            }
+            switch (alt11) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:
+                    {
+                    if ( input.LA(1)=='&'||input.LA(1)=='.' ) {
+                        input.consume();
+
+                    }
+                    else {
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recover(mse);    throw mse;
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_EQEQ
+
+    // $ANTLR start RULE_POWER
+    public final void mRULE_POWER() throws RecognitionException {
+        try {
+            int _type = RULE_POWER;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6783:12: ( '^' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6783:14: '^' ( '.' )?
+            {
+            match('^'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6783:18: ( '.' )?
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0=='.') ) {
+                alt12=1;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6783:18: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_POWER
+
+    // $ANTLR start RULE_SLASH
+    public final void mRULE_SLASH() throws RecognitionException {
+        try {
+            int _type = RULE_SLASH;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6785:12: ( '/' ( '.' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6785:14: '/' ( '.' )?
+            {
+            match('/'); 
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6785:18: ( '.' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='.') ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6785:18: '.'
+                    {
+                    match('.'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_SLASH
+
+    // $ANTLR start RULE_UNSIGNED_REAL
+    public final void mRULE_UNSIGNED_REAL() throws RecognitionException {
+        try {
+            int _type = RULE_UNSIGNED_REAL;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:20: ( ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )? | ( '0' .. '9' )+ ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:22: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )? | ( '0' .. '9' )+ ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:22: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )? | ( '0' .. '9' )+ ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+            int alt22=2;
+            alt22 = dfa22.predict(input);
+            switch (alt22) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:23: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:23: ( '0' .. '9' )+
+                    int cnt14=0;
+                    loop14:
+                    do {
+                        int alt14=2;
+                        int LA14_0 = input.LA(1);
+
+                        if ( ((LA14_0>='0' && LA14_0<='9')) ) {
+                            alt14=1;
+                        }
+
+
+                        switch (alt14) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:24: '0' .. '9'
+                    	    {
+                    	    matchRange('0','9'); 
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt14 >= 1 ) break loop14;
+                                EarlyExitException eee =
+                                    new EarlyExitException(14, input);
+                                throw eee;
+                        }
+                        cnt14++;
+                    } while (true);
+
+                    match('.'); 
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:39: ( '0' .. '9' )*
+                    loop15:
+                    do {
+                        int alt15=2;
+                        int LA15_0 = input.LA(1);
+
+                        if ( ((LA15_0>='0' && LA15_0<='9')) ) {
+                            alt15=1;
+                        }
+
+
+                        switch (alt15) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:40: '0' .. '9'
+                    	    {
+                    	    matchRange('0','9'); 
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop15;
+                        }
+                    } while (true);
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:51: ( ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )?
+                    int alt18=2;
+                    int LA18_0 = input.LA(1);
+
+                    if ( (LA18_0=='E'||LA18_0=='e') ) {
+                        alt18=1;
+                    }
+                    switch (alt18) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:52: ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+
+                            {
+                            if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
+                                input.consume();
+
+                            }
+                            else {
+                                MismatchedSetException mse =
+                                    new MismatchedSetException(null,input);
+                                recover(mse);    throw mse;
+                            }
+
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:62: ( '+' | '-' )?
+                            int alt16=2;
+                            int LA16_0 = input.LA(1);
+
+                            if ( (LA16_0=='+'||LA16_0=='-') ) {
+                                alt16=1;
+                            }
+                            switch (alt16) {
+                                case 1 :
+                                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:
+                                    {
+                                    if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
+                                        input.consume();
+
+                                    }
+                                    else {
+                                        MismatchedSetException mse =
+                                            new MismatchedSetException(null,input);
+                                        recover(mse);    throw mse;
+                                    }
+
+
+                                    }
+                                    break;
+
+                            }
+
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:73: ( '0' .. '9' )+
+                            int cnt17=0;
+                            loop17:
+                            do {
+                                int alt17=2;
+                                int LA17_0 = input.LA(1);
+
+                                if ( ((LA17_0>='0' && LA17_0<='9')) ) {
+                                    alt17=1;
+                                }
+
+
+                                switch (alt17) {
+                            	case 1 :
+                            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:74: '0' .. '9'
+                            	    {
+                            	    matchRange('0','9'); 
+
+                            	    }
+                            	    break;
+
+                            	default :
+                            	    if ( cnt17 >= 1 ) break loop17;
+                                        EarlyExitException eee =
+                                            new EarlyExitException(17, input);
+                                        throw eee;
+                                }
+                                cnt17++;
+                            } while (true);
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:87: ( '0' .. '9' )+ ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:87: ( '0' .. '9' )+
+                    int cnt19=0;
+                    loop19:
+                    do {
+                        int alt19=2;
+                        int LA19_0 = input.LA(1);
+
+                        if ( ((LA19_0>='0' && LA19_0<='9')) ) {
+                            alt19=1;
+                        }
+
+
+                        switch (alt19) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:88: '0' .. '9'
+                    	    {
+                    	    matchRange('0','9'); 
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt19 >= 1 ) break loop19;
+                                EarlyExitException eee =
+                                    new EarlyExitException(19, input);
+                                throw eee;
+                        }
+                        cnt19++;
+                    } while (true);
+
+                    if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
+                        input.consume();
+
+                    }
+                    else {
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recover(mse);    throw mse;
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:109: ( '+' | '-' )?
+                    int alt20=2;
+                    int LA20_0 = input.LA(1);
+
+                    if ( (LA20_0=='+'||LA20_0=='-') ) {
+                        alt20=1;
+                    }
+                    switch (alt20) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:
+                            {
+                            if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
+                                input.consume();
+
+                            }
+                            else {
+                                MismatchedSetException mse =
+                                    new MismatchedSetException(null,input);
+                                recover(mse);    throw mse;
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:120: ( '0' .. '9' )+
+                    int cnt21=0;
+                    loop21:
+                    do {
+                        int alt21=2;
+                        int LA21_0 = input.LA(1);
+
+                        if ( ((LA21_0>='0' && LA21_0<='9')) ) {
+                            alt21=1;
+                        }
+
+
+                        switch (alt21) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6787:121: '0' .. '9'
+                    	    {
+                    	    matchRange('0','9'); 
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt21 >= 1 ) break loop21;
+                                EarlyExitException eee =
+                                    new EarlyExitException(21, input);
+                                throw eee;
+                        }
+                        cnt21++;
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_UNSIGNED_REAL
+
+    // $ANTLR start RULE_UNSIGNED_INTEGER
+    public final void mRULE_UNSIGNED_INTEGER() throws RecognitionException {
+        try {
+            int _type = RULE_UNSIGNED_INTEGER;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6789:23: ( ( '0' .. '9' )+ )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6789:25: ( '0' .. '9' )+
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6789:25: ( '0' .. '9' )+
+            int cnt23=0;
+            loop23:
+            do {
+                int alt23=2;
+                int LA23_0 = input.LA(1);
+
+                if ( ((LA23_0>='0' && LA23_0<='9')) ) {
+                    alt23=1;
+                }
+
+
+                switch (alt23) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6789:26: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt23 >= 1 ) break loop23;
+                        EarlyExitException eee =
+                            new EarlyExitException(23, input);
+                        throw eee;
+                }
+                cnt23++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_UNSIGNED_INTEGER
+
+    // $ANTLR start RULE_IDENT
+    public final void mRULE_IDENT() throws RecognitionException {
+        try {
+            int _type = RULE_IDENT;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6791:12: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6791:14: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            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;
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6791:38: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop24:
+            do {
+                int alt24=2;
+                int LA24_0 = input.LA(1);
+
+                if ( ((LA24_0>='0' && LA24_0<='9')||(LA24_0>='A' && LA24_0<='Z')||LA24_0=='_'||(LA24_0>='a' && LA24_0<='z')) ) {
+                    alt24=1;
+                }
+
+
+                switch (alt24) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.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 loop24;
+                }
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_IDENT
+
+    // $ANTLR start RULE_ID
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6793:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6793:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6793:11: ( '^' )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0=='^') ) {
+                alt25=1;
+            }
+            switch (alt25) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6793: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;
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6793:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop26:
+            do {
+                int alt26=2;
+                int LA26_0 = input.LA(1);
+
+                if ( ((LA26_0>='0' && LA26_0<='9')||(LA26_0>='A' && LA26_0<='Z')||LA26_0=='_'||(LA26_0>='a' && LA26_0<='z')) ) {
+                    alt26=1;
+                }
+
+
+                switch (alt26) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.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 loop26;
+                }
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ID
+
+    // $ANTLR start RULE_INT
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6795:10: ( ( '0' .. '9' )+ )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6795:12: ( '0' .. '9' )+
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6795:12: ( '0' .. '9' )+
+            int cnt27=0;
+            loop27:
+            do {
+                int alt27=2;
+                int LA27_0 = input.LA(1);
+
+                if ( ((LA27_0>='0' && LA27_0<='9')) ) {
+                    alt27=1;
+                }
+
+
+                switch (alt27) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6795:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt27 >= 1 ) break loop27;
+                        EarlyExitException eee =
+                            new EarlyExitException(27, input);
+                        throw eee;
+                }
+                cnt27++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_INT
+
+    // $ANTLR start RULE_STRING
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt30=2;
+            int LA30_0 = input.LA(1);
+
+            if ( (LA30_0=='\"') ) {
+                alt30=1;
+            }
+            else if ( (LA30_0=='\'') ) {
+                alt30=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("6797:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )", 30, 0, input);
+
+                throw nvae;
+            }
+            switch (alt30) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop28:
+                    do {
+                        int alt28=3;
+                        int LA28_0 = input.LA(1);
+
+                        if ( (LA28_0=='\\') ) {
+                            alt28=1;
+                        }
+                        else if ( ((LA28_0>='\u0000' && LA28_0<='!')||(LA28_0>='#' && LA28_0<='[')||(LA28_0>=']' && LA28_0<='\uFFFE')) ) {
+                            alt28=2;
+                        }
+
+
+                        switch (alt28) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:62: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop28;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:82: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:87: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop29:
+                    do {
+                        int alt29=3;
+                        int LA29_0 = input.LA(1);
+
+                        if ( (LA29_0=='\\') ) {
+                            alt29=1;
+                        }
+                        else if ( ((LA29_0>='\u0000' && LA29_0<='&')||(LA29_0>='(' && LA29_0<='[')||(LA29_0>=']' && LA29_0<='\uFFFE')) ) {
+                            alt29=2;
+                        }
+
+
+                        switch (alt29) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:88: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6797:129: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop29;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_STRING
+
+    // $ANTLR start RULE_ML_COMMENT
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6799:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6799:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6799:24: ( options {greedy=false; } : . )*
+            loop31:
+            do {
+                int alt31=2;
+                int LA31_0 = input.LA(1);
+
+                if ( (LA31_0=='*') ) {
+                    int LA31_1 = input.LA(2);
+
+                    if ( (LA31_1=='/') ) {
+                        alt31=2;
+                    }
+                    else if ( ((LA31_1>='\u0000' && LA31_1<='.')||(LA31_1>='0' && LA31_1<='\uFFFE')) ) {
+                        alt31=1;
+                    }
+
+
+                }
+                else if ( ((LA31_0>='\u0000' && LA31_0<=')')||(LA31_0>='+' && LA31_0<='\uFFFE')) ) {
+                    alt31=1;
+                }
+
+
+                switch (alt31) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6799:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop31;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        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;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop32:
+            do {
+                int alt32=2;
+                int LA32_0 = input.LA(1);
+
+                if ( ((LA32_0>='\u0000' && LA32_0<='\t')||(LA32_0>='\u000B' && LA32_0<='\f')||(LA32_0>='\u000E' && LA32_0<='\uFFFE')) ) {
+                    alt32=1;
+                }
+
+
+                switch (alt32) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801: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)<='\uFFFE') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop32;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:40: ( ( '\\r' )? '\\n' )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
+
+            if ( (LA34_0=='\n'||LA34_0=='\r') ) {
+                alt34=1;
+            }
+            switch (alt34) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:41: ( '\\r' )?
+                    int alt33=2;
+                    int LA33_0 = input.LA(1);
+
+                    if ( (LA33_0=='\r') ) {
+                        alt33=1;
+                    }
+                    switch (alt33) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6801:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_SL_COMMENT
+
+    // $ANTLR start RULE_WS
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6803:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6803:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6803:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt35=0;
+            loop35:
+            do {
+                int alt35=2;
+                int LA35_0 = input.LA(1);
+
+                if ( ((LA35_0>='\t' && LA35_0<='\n')||LA35_0=='\r'||LA35_0==' ') ) {
+                    alt35=1;
+                }
+
+
+                switch (alt35) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.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 ( cnt35 >= 1 ) break loop35;
+                        EarlyExitException eee =
+                            new EarlyExitException(35, input);
+                        throw eee;
+                }
+                cnt35++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_WS
+
+    // $ANTLR start RULE_ANY_OTHER
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6805:16: ( . )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6805:18: .
+            {
+            matchAny(); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ANY_OTHER
+
+    public void mTokens() throws RecognitionException {
+        // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:8: ( T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | RULE_DOT | RULE_LPAR | RULE_RPAR | RULE_LBRACK | RULE_RBRACK | RULE_LBRACE | RULE_RBRACE | RULE_EQUALS | RULE_ASSIGN | RULE_COMMA | RULE_COLON | RULE_SEMICOLON | RULE_PLUS_EW | RULE_MINUS_EW | RULE_STAR_EW | RULE_SLASH_EW | RULE_POWER_EW | RULE_STAR | RULE_MINUS | RULE_PLUS | RULE_LESS | RULE_LESSEQ | RULE_LESSGT | RULE_GREATER | RULE_GREATEREQ | RULE_EQEQ | RULE_POWER | RULE_SLASH | RULE_UNSIGNED_REAL | RULE_UNSIGNED_INTEGER | RULE_IDENT | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt36=95;
+        alt36 = dfa36.predict(input);
+        switch (alt36) {
+            case 1 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:10: T42
+                {
+                mT42(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:14: T43
+                {
+                mT43(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:18: T44
+                {
+                mT44(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:22: T45
+                {
+                mT45(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:26: T46
+                {
+                mT46(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:30: T47
+                {
+                mT47(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:34: T48
+                {
+                mT48(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:38: T49
+                {
+                mT49(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:42: T50
+                {
+                mT50(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:46: T51
+                {
+                mT51(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:50: T52
+                {
+                mT52(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:54: T53
+                {
+                mT53(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:58: T54
+                {
+                mT54(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:62: T55
+                {
+                mT55(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:66: T56
+                {
+                mT56(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:70: T57
+                {
+                mT57(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:74: T58
+                {
+                mT58(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:78: T59
+                {
+                mT59(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:82: T60
+                {
+                mT60(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:86: T61
+                {
+                mT61(); 
+
+                }
+                break;
+            case 21 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:90: T62
+                {
+                mT62(); 
+
+                }
+                break;
+            case 22 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:94: T63
+                {
+                mT63(); 
+
+                }
+                break;
+            case 23 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:98: T64
+                {
+                mT64(); 
+
+                }
+                break;
+            case 24 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:102: T65
+                {
+                mT65(); 
+
+                }
+                break;
+            case 25 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:106: T66
+                {
+                mT66(); 
+
+                }
+                break;
+            case 26 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:110: T67
+                {
+                mT67(); 
+
+                }
+                break;
+            case 27 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:114: T68
+                {
+                mT68(); 
+
+                }
+                break;
+            case 28 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:118: T69
+                {
+                mT69(); 
+
+                }
+                break;
+            case 29 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:122: T70
+                {
+                mT70(); 
+
+                }
+                break;
+            case 30 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:126: T71
+                {
+                mT71(); 
+
+                }
+                break;
+            case 31 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:130: T72
+                {
+                mT72(); 
+
+                }
+                break;
+            case 32 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:134: T73
+                {
+                mT73(); 
+
+                }
+                break;
+            case 33 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:138: T74
+                {
+                mT74(); 
+
+                }
+                break;
+            case 34 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:142: T75
+                {
+                mT75(); 
+
+                }
+                break;
+            case 35 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:146: T76
+                {
+                mT76(); 
+
+                }
+                break;
+            case 36 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:150: T77
+                {
+                mT77(); 
+
+                }
+                break;
+            case 37 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:154: T78
+                {
+                mT78(); 
+
+                }
+                break;
+            case 38 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:158: T79
+                {
+                mT79(); 
+
+                }
+                break;
+            case 39 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:162: T80
+                {
+                mT80(); 
+
+                }
+                break;
+            case 40 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:166: T81
+                {
+                mT81(); 
+
+                }
+                break;
+            case 41 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:170: T82
+                {
+                mT82(); 
+
+                }
+                break;
+            case 42 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:174: T83
+                {
+                mT83(); 
+
+                }
+                break;
+            case 43 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:178: T84
+                {
+                mT84(); 
+
+                }
+                break;
+            case 44 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:182: T85
+                {
+                mT85(); 
+
+                }
+                break;
+            case 45 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:186: T86
+                {
+                mT86(); 
+
+                }
+                break;
+            case 46 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:190: T87
+                {
+                mT87(); 
+
+                }
+                break;
+            case 47 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:194: T88
+                {
+                mT88(); 
+
+                }
+                break;
+            case 48 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:198: T89
+                {
+                mT89(); 
+
+                }
+                break;
+            case 49 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:202: T90
+                {
+                mT90(); 
+
+                }
+                break;
+            case 50 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:206: T91
+                {
+                mT91(); 
+
+                }
+                break;
+            case 51 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:210: T92
+                {
+                mT92(); 
+
+                }
+                break;
+            case 52 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:214: T93
+                {
+                mT93(); 
+
+                }
+                break;
+            case 53 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:218: T94
+                {
+                mT94(); 
+
+                }
+                break;
+            case 54 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:222: T95
+                {
+                mT95(); 
+
+                }
+                break;
+            case 55 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:226: T96
+                {
+                mT96(); 
+
+                }
+                break;
+            case 56 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:230: T97
+                {
+                mT97(); 
+
+                }
+                break;
+            case 57 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:234: T98
+                {
+                mT98(); 
+
+                }
+                break;
+            case 58 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:238: RULE_DOT
+                {
+                mRULE_DOT(); 
+
+                }
+                break;
+            case 59 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:247: RULE_LPAR
+                {
+                mRULE_LPAR(); 
+
+                }
+                break;
+            case 60 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:257: RULE_RPAR
+                {
+                mRULE_RPAR(); 
+
+                }
+                break;
+            case 61 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:267: RULE_LBRACK
+                {
+                mRULE_LBRACK(); 
+
+                }
+                break;
+            case 62 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:279: RULE_RBRACK
+                {
+                mRULE_RBRACK(); 
+
+                }
+                break;
+            case 63 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:291: RULE_LBRACE
+                {
+                mRULE_LBRACE(); 
+
+                }
+                break;
+            case 64 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:303: RULE_RBRACE
+                {
+                mRULE_RBRACE(); 
+
+                }
+                break;
+            case 65 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:315: RULE_EQUALS
+                {
+                mRULE_EQUALS(); 
+
+                }
+                break;
+            case 66 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:327: RULE_ASSIGN
+                {
+                mRULE_ASSIGN(); 
+
+                }
+                break;
+            case 67 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:339: RULE_COMMA
+                {
+                mRULE_COMMA(); 
+
+                }
+                break;
+            case 68 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:350: RULE_COLON
+                {
+                mRULE_COLON(); 
+
+                }
+                break;
+            case 69 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:361: RULE_SEMICOLON
+                {
+                mRULE_SEMICOLON(); 
+
+                }
+                break;
+            case 70 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:376: RULE_PLUS_EW
+                {
+                mRULE_PLUS_EW(); 
+
+                }
+                break;
+            case 71 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:389: RULE_MINUS_EW
+                {
+                mRULE_MINUS_EW(); 
+
+                }
+                break;
+            case 72 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:403: RULE_STAR_EW
+                {
+                mRULE_STAR_EW(); 
+
+                }
+                break;
+            case 73 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:416: RULE_SLASH_EW
+                {
+                mRULE_SLASH_EW(); 
+
+                }
+                break;
+            case 74 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:430: RULE_POWER_EW
+                {
+                mRULE_POWER_EW(); 
+
+                }
+                break;
+            case 75 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:444: RULE_STAR
+                {
+                mRULE_STAR(); 
+
+                }
+                break;
+            case 76 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:454: RULE_MINUS
+                {
+                mRULE_MINUS(); 
+
+                }
+                break;
+            case 77 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:465: RULE_PLUS
+                {
+                mRULE_PLUS(); 
+
+                }
+                break;
+            case 78 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:475: RULE_LESS
+                {
+                mRULE_LESS(); 
+
+                }
+                break;
+            case 79 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:485: RULE_LESSEQ
+                {
+                mRULE_LESSEQ(); 
+
+                }
+                break;
+            case 80 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:497: RULE_LESSGT
+                {
+                mRULE_LESSGT(); 
+
+                }
+                break;
+            case 81 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:509: RULE_GREATER
+                {
+                mRULE_GREATER(); 
+
+                }
+                break;
+            case 82 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:522: RULE_GREATEREQ
+                {
+                mRULE_GREATEREQ(); 
+
+                }
+                break;
+            case 83 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:537: RULE_EQEQ
+                {
+                mRULE_EQEQ(); 
+
+                }
+                break;
+            case 84 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:547: RULE_POWER
+                {
+                mRULE_POWER(); 
+
+                }
+                break;
+            case 85 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:558: RULE_SLASH
+                {
+                mRULE_SLASH(); 
+
+                }
+                break;
+            case 86 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:569: RULE_UNSIGNED_REAL
+                {
+                mRULE_UNSIGNED_REAL(); 
+
+                }
+                break;
+            case 87 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:588: RULE_UNSIGNED_INTEGER
+                {
+                mRULE_UNSIGNED_INTEGER(); 
+
+                }
+                break;
+            case 88 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:610: RULE_IDENT
+                {
+                mRULE_IDENT(); 
+
+                }
+                break;
+            case 89 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:621: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 90 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:629: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 91 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:638: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 92 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:650: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 93 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:666: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 94 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:682: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 95 :
+                // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1:690: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA22 dfa22 = new DFA22(this);
+    protected DFA36 dfa36 = new DFA36(this);
+    static final String DFA22_eotS =
+        "\4\uffff";
+    static final String DFA22_eofS =
+        "\4\uffff";
+    static final String DFA22_minS =
+        "\1\60\1\56\2\uffff";
+    static final String DFA22_maxS =
+        "\1\71\1\145\2\uffff";
+    static final String DFA22_acceptS =
+        "\2\uffff\1\2\1\1";
+    static final String DFA22_specialS =
+        "\4\uffff}>";
+    static final String[] DFA22_transitionS = {
+            "\12\1",
+            "\1\3\1\uffff\12\1\13\uffff\1\2\37\uffff\1\2",
+            "",
+            ""
+    };
+
+    static final short[] DFA22_eot = DFA.unpackEncodedString(DFA22_eotS);
+    static final short[] DFA22_eof = DFA.unpackEncodedString(DFA22_eofS);
+    static final char[] DFA22_min = DFA.unpackEncodedStringToUnsignedChars(DFA22_minS);
+    static final char[] DFA22_max = DFA.unpackEncodedStringToUnsignedChars(DFA22_maxS);
+    static final short[] DFA22_accept = DFA.unpackEncodedString(DFA22_acceptS);
+    static final short[] DFA22_special = DFA.unpackEncodedString(DFA22_specialS);
+    static final short[][] DFA22_transition;
+
+    static {
+        int numStates = DFA22_transitionS.length;
+        DFA22_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA22_transition[i] = DFA.unpackEncodedString(DFA22_transitionS[i]);
+        }
+    }
+
+    class DFA22 extends DFA {
+
+        public DFA22(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 22;
+            this.eot = DFA22_eot;
+            this.eof = DFA22_eof;
+            this.min = DFA22_min;
+            this.max = DFA22_max;
+            this.accept = DFA22_accept;
+            this.special = DFA22_special;
+            this.transition = DFA22_transition;
+        }
+        public String getDescription() {
+            return "6787:22: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )? | ( '0' .. '9' )+ ( 'E' | 'e' ) ( '+' | '-' )? ( '0' .. '9' )+ )";
+        }
+    }
+    static final String DFA36_eotS =
+        "\1\uffff\20\54\1\126\6\uffff\1\136\1\140\5\uffff\1\150\1\51\1\152"+
+        "\1\153\1\157\1\162\1\54\2\51\2\uffff\2\54\1\uffff\22\54\1\u008d"+
+        "\1\54\1\u0095\1\u0096\16\54\40\uffff\1\162\3\uffff\6\54\1\u00ac"+
+        "\4\54\1\u00b1\10\54\1\u00bb\3\54\1\uffff\7\54\2\uffff\5\54\1\u00cd"+
+        "\7\54\1\u00d5\2\54\1\u00d8\3\54\1\u00dc\1\uffff\4\54\1\uffff\1\54"+
+        "\1\u00e3\1\u00e6\6\54\1\uffff\21\54\1\uffff\3\54\1\u0101\1\u0102"+
+        "\1\u0103\1\u0104\1\uffff\2\54\1\uffff\1\u0107\1\54\1\u0109\1\uffff"+
+        "\1\u010a\5\54\1\uffff\2\54\1\uffff\10\54\1\u011a\5\54\1\u0120\1"+
+        "\u0121\4\54\1\u0127\3\54\1\u012b\1\u012c\4\uffff\1\u012d\1\u012e"+
+        "\1\uffff\1\54\2\uffff\5\54\1\u0135\6\54\1\u013c\1\54\1\u013e\1\uffff"+
+        "\1\54\1\u0140\1\54\1\u0142\1\54\2\uffff\1\54\1\u0145\3\54\1\uffff"+
+        "\1\u0149\2\54\4\uffff\2\54\1\u014e\3\54\1\uffff\2\54\1\u0154\1\54"+
+        "\1\u0156\1\54\1\uffff\1\54\1\uffff\1\54\1\uffff\1\54\1\uffff\1\54"+
+        "\1\u015c\1\uffff\2\54\1\u0160\1\uffff\2\54\1\u0163\1\54\1\uffff"+
+        "\1\u0165\2\54\1\u0168\1\u0169\1\uffff\1\54\1\uffff\1\54\1\u016c"+
+        "\1\u016d\2\54\1\uffff\1\54\1\u0171\1\54\1\uffff\2\54\1\uffff\1\54"+
+        "\1\uffff\2\54\2\uffff\1\u0178\1\u0179\2\uffff\1\u017a\2\54\1\uffff"+
+        "\1\u017d\1\u017e\1\54\1\u0180\2\54\3\uffff\2\54\2\uffff\1\u0185"+
+        "\1\uffff\1\u0186\1\54\1\u0188\1\54\2\uffff\1\u018a\1\uffff\1\54"+
+        "\1\uffff\1\u018c\1\uffff";
+    static final String DFA36_eofS =
+        "\u018d\uffff";
+    static final String DFA36_minS =
+        "\1\0\20\60\1\52\6\uffff\2\75\5\uffff\3\75\1\101\1\52\1\56\1\60\2"+
+        "\0\2\uffff\2\60\1\uffff\44\60\40\uffff\1\56\3\uffff\30\60\1\uffff"+
+        "\7\60\2\uffff\25\60\1\uffff\4\60\1\uffff\11\60\1\uffff\21\60\1\uffff"+
+        "\7\60\1\uffff\2\60\1\uffff\3\60\1\uffff\6\60\1\uffff\2\60\1\uffff"+
+        "\32\60\4\uffff\2\60\1\uffff\1\60\2\uffff\17\60\1\uffff\5\60\2\uffff"+
+        "\5\60\1\uffff\3\60\4\uffff\6\60\1\uffff\6\60\1\uffff\1\60\1\uffff"+
+        "\1\60\1\uffff\1\60\1\uffff\2\60\1\uffff\3\60\1\uffff\4\60\1\uffff"+
+        "\5\60\1\uffff\1\60\1\uffff\5\60\1\uffff\3\60\1\uffff\2\60\1\uffff"+
+        "\1\60\1\uffff\2\60\2\uffff\2\60\2\uffff\3\60\1\uffff\6\60\3\uffff"+
+        "\2\60\2\uffff\1\60\1\uffff\4\60\2\uffff\1\60\1\uffff\1\60\1\uffff"+
+        "\1\60\1\uffff";
+    static final String DFA36_maxS =
+        "\1\ufffe\20\172\1\136\6\uffff\2\75\5\uffff\1\76\2\75\1\172\1\57"+
+        "\1\145\1\172\2\ufffe\2\uffff\2\172\1\uffff\44\172\40\uffff\1\145"+
+        "\3\uffff\30\172\1\uffff\7\172\2\uffff\25\172\1\uffff\4\172\1\uffff"+
+        "\11\172\1\uffff\21\172\1\uffff\7\172\1\uffff\2\172\1\uffff\3\172"+
+        "\1\uffff\6\172\1\uffff\2\172\1\uffff\32\172\4\uffff\2\172\1\uffff"+
+        "\1\172\2\uffff\17\172\1\uffff\5\172\2\uffff\5\172\1\uffff\3\172"+
+        "\4\uffff\6\172\1\uffff\6\172\1\uffff\1\172\1\uffff\1\172\1\uffff"+
+        "\1\172\1\uffff\2\172\1\uffff\3\172\1\uffff\4\172\1\uffff\5\172\1"+
+        "\uffff\1\172\1\uffff\5\172\1\uffff\3\172\1\uffff\2\172\1\uffff\1"+
+        "\172\1\uffff\2\172\2\uffff\2\172\2\uffff\3\172\1\uffff\6\172\3\uffff"+
+        "\2\172\2\uffff\1\172\1\uffff\4\172\2\uffff\1\172\1\uffff\1\172\1"+
+        "\uffff\1\172\1\uffff";
+    static final String DFA36_acceptS =
+        "\22\uffff\1\73\1\74\1\75\1\76\1\77\1\100\2\uffff\1\103\1\105\1\113"+
+        "\1\114\1\115\11\uffff\1\136\1\137\2\uffff\1\130\44\uffff\1\110\1"+
+        "\107\1\106\1\112\1\111\1\72\1\73\1\74\1\75\1\76\1\77\1\100\1\123"+
+        "\1\101\1\102\1\104\1\103\1\105\1\113\1\114\1\115\1\120\1\117\1\116"+
+        "\1\122\1\121\1\124\1\131\1\135\1\134\1\125\1\126\1\uffff\1\127\1"+
+        "\133\1\136\30\uffff\1\55\7\uffff\1\54\1\34\25\uffff\1\45\4\uffff"+
+        "\1\7\11\uffff\1\11\21\uffff\1\56\7\uffff\1\57\2\uffff\1\50\3\uffff"+
+        "\1\25\6\uffff\1\35\2\uffff\1\44\32\uffff\1\43\1\61\1\70\1\46\2\uffff"+
+        "\1\47\1\uffff\1\2\1\60\17\uffff\1\21\5\uffff\1\20\1\32\5\uffff\1"+
+        "\63\3\uffff\1\41\1\66\1\64\1\1\6\uffff\1\52\6\uffff\1\15\1\uffff"+
+        "\1\33\1\uffff\1\65\1\uffff\1\42\2\uffff\1\23\3\uffff\1\26\4\uffff"+
+        "\1\6\5\uffff\1\4\1\uffff\1\71\5\uffff\1\40\3\uffff\1\53\2\uffff"+
+        "\1\10\1\uffff\1\14\2\uffff\1\51\1\36\2\uffff\1\27\1\12\3\uffff\1"+
+        "\31\6\uffff\1\30\1\16\1\17\2\uffff\1\67\1\37\1\uffff\1\5\4\uffff"+
+        "\1\62\1\13\1\uffff\1\22\1\uffff\1\3\1\uffff\1\24";
+    static final String DFA36_specialS =
+        "\u018d\uffff}>";
+    static final String[] DFA36_transitionS = {
+            "\11\51\2\50\2\51\1\50\22\51\1\50\1\40\1\46\4\51\1\47\1\22\1"+
+            "\23\1\34\1\36\1\32\1\35\1\21\1\43\12\44\1\31\1\33\1\37\1\30"+
+            "\1\41\2\51\32\45\1\24\1\51\1\25\1\42\1\45\1\51\1\13\1\14\1\11"+
+            "\1\5\1\3\1\2\2\45\1\10\2\45\1\16\1\20\1\17\1\6\1\4\1\45\1\7"+
+            "\1\12\1\15\2\45\1\1\3\45\1\26\1\51\1\27\uff81\51",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\7\55\1\53\1\52\21"+
+            "\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\62\7\55\1\57\2\55"+
+            "\1\60\2\55\1\61\5\55\1\56\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\65\12\55\1\66\1"+
+            "\55\1\64\2\55\1\67\6\55\1\63\2\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\70\20\55\1\71\2"+
+            "\55\1\72\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\73\3\55\1\74"+
+            "\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\77\2\55\1"+
+            "\75\1\76\4\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\100\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\5\55\1\102\6\55\1"+
+            "\103\1\101\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\105\2\55\1"+
+            "\104\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\106\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\107\1\55\1"+
+            "\110\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\112\5\55\1"+
+            "\111\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\7\55\1\113\11\55\1"+
+            "\114\6\55\1\115\1\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\116\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\117\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\120\13\55",
+            "\1\121\1\123\1\uffff\1\122\1\uffff\1\125\56\uffff\1\124",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\135",
+            "\1\137",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\147\1\146",
+            "\1\146",
+            "\1\151",
+            "\32\154\4\uffff\1\154\1\uffff\32\154",
+            "\1\156\4\uffff\1\155",
+            "\1\160\1\uffff\12\161\13\uffff\1\160\37\uffff\1\160",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\uffff\163",
+            "\uffff\163",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\165\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\166\3\55\1"+
+            "\167\21\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\170\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\171\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\172\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\173\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\174\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\17\55\1\175\3\55\1"+
+            "\176\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u0081\1\u0080"+
+            "\20\55\1\177\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u0082\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u0083\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\24\55\1\u0084\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u0086\16\55"+
+            "\1\u0085\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u0087\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\55\1\u0088\30\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u0089\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u008a\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u008b\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u008c\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u008e\1\u008f"+
+            "\13\55\1\u0091\3\55\1\u0090\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u0094\4\55"+
+            "\1\u0092\1\55\1\u0093\12\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\17\55\1\u0097\12\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0098\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0099\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u009a\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\6\55\1\u009b\23\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u009c\11\55"+
+            "\1\u009d\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u009e\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u009f\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00a0\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\24\55\1\u00a1\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\17\55\1\u00a2\12\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u00a3\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00a4\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u00a5\26\55",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\160\1\uffff\12\161\13\uffff\1\160\37\uffff\1\160",
+            "",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\7\55\1\u00a6\22\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u00a7\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u00a8\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u00a9\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00aa\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\26\55\1\u00ab\3\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u00ad\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00ae\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00af\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\14\55\1\u00b0\15\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00b2\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\7\55\1\u00b3\22\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00b4\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00b5\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00b7\22\55\1\u00b6"+
+            "\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\12\55\1\u00b8\17\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00b9\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u00ba\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u00bc\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00be\12\55"+
+            "\1\u00bd\12\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00bf\10\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u00c0\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00c1\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\24\55\1\u00c2\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u00c3\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00c4\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\24\55\1\u00c5\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00c6\6\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u00c7\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u00c9\4\55"+
+            "\1\u00c8\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u00ca\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00cb\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u00cc\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u00ce\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00cf\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u00d0\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u00d1\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00d2\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00d3\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\17\55\1\u00d4\12\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00d6\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u00d7\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00d9\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00da\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u00db\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00dd\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u00de\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u00df\3\55"+
+            "\1\u00e0\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00e1\25\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\17\55\1\u00e2\12\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u00e4\15\55"+
+            "\1\u00e5\3\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00e7\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u00e8\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\14\55\1\u00e9\15\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00ea\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00eb\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u00ec\21\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00ed\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\24\55\1\u00ee\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00ef\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u00f0\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00f1\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u00f2\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00f3\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00f4\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00f5\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00f6\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u00f7\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00f8\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00f9\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u00fa\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u00fb\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u00fc\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u00fd\10\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u00fe\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\12\55\1\u00ff\17\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\12\55\1\u0100\17\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u0105\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0106\14\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u0108\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u010b\26\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u010c\26\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u010d\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u010e\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u010f\7\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\5\55\1\u0110\24\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\7\55\1\u0111\22\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u0112\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0113\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0114\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\6\55\1\u0115\23\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u0116\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u0117\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0118\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u0119\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u011b\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u011c\26\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u011d\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u011e\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u011f\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0122\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u0123\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0125\20\55\1\u0124"+
+            "\10\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\2\55\1\u0126\27\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\14\55\1\u0128\15\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u0129\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u012a\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u012f\13\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0130\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\22\55\1\u0131\7\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0132\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0133\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\24\55\1\u0134\5\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0136\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u0137\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u0138\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u0139\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u013a\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u013b\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u013d\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u013f\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0141\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0143\25\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u0144\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0146\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0147\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u0148\6\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u014a\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u014b\6\55",
+            "",
+            "",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u014c\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\55\1\u014d\30\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u014f\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u0150\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u0151\16\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0152\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0153\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0155\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0157\25\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0158\25\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u0159\26\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u015a\10\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u015b\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u015d\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u015e\6\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u015f\13\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\7\55\1\u0161\22\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u0162\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u0164\16\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\10\55\1\u0166\21\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\u0167\31\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u016a\10\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u016b\26\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u016e\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\55\1\u016f\30\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0170\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\21\55\1\u0172\10\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\14\55\1\u0173\15\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u0174\13\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0175\25\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\16\55\1\u0176\13\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\23\55\1\u0177\6\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\13\55\1\u017b\16\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u017c\25\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u017f\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\15\55\1\u0181\14\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0182\25\55",
+            "",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\4\55\1\u0183\25\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u0184\26\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\3\55\1\u0187\26\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\1\55\1\u0189\30\55",
+            "",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\30\55\1\u018b\1\55",
+            "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            ""
+    };
+
+    static final short[] DFA36_eot = DFA.unpackEncodedString(DFA36_eotS);
+    static final short[] DFA36_eof = DFA.unpackEncodedString(DFA36_eofS);
+    static final char[] DFA36_min = DFA.unpackEncodedStringToUnsignedChars(DFA36_minS);
+    static final char[] DFA36_max = DFA.unpackEncodedStringToUnsignedChars(DFA36_maxS);
+    static final short[] DFA36_accept = DFA.unpackEncodedString(DFA36_acceptS);
+    static final short[] DFA36_special = DFA.unpackEncodedString(DFA36_specialS);
+    static final short[][] DFA36_transition;
+
+    static {
+        int numStates = DFA36_transitionS.length;
+        DFA36_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA36_transition[i] = DFA.unpackEncodedString(DFA36_transitionS[i]);
+        }
+    }
+
+    class DFA36 extends DFA {
+
+        public DFA36(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 36;
+            this.eot = DFA36_eot;
+            this.eof = DFA36_eof;
+            this.min = DFA36_min;
+            this.max = DFA36_max;
+            this.accept = DFA36_accept;
+            this.special = DFA36_special;
+            this.transition = DFA36_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | RULE_DOT | RULE_LPAR | RULE_RPAR | RULE_LBRACK | RULE_RBRACK | RULE_LBRACE | RULE_RBRACE | RULE_EQUALS | RULE_ASSIGN | RULE_COMMA | RULE_COLON | RULE_SEMICOLON | RULE_PLUS_EW | RULE_MINUS_EW | RULE_STAR_EW | RULE_SLASH_EW | RULE_POWER_EW | RULE_STAR | RULE_MINUS | RULE_PLUS | RULE_LESS | RULE_LESSEQ | RULE_LESSGT | RULE_GREATER | RULE_GREATEREQ | RULE_EQEQ | RULE_POWER | RULE_SLASH | RULE_UNSIGNED_REAL | RULE_UNSIGNED_INTEGER | RULE_IDENT | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+        }
+    }
+ 
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBaseParser.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBaseParser.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBaseParser.java	(revision 540)
@@ -0,0 +1,17039 @@
+package org.modelica.xtext.parser.antlr.internal; 
+
+import java.io.InputStream;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parser.*;
+import org.eclipse.xtext.parser.impl.*;
+import org.eclipse.xtext.parsetree.*;
+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.eclipse.xtext.conversion.ValueConverterException;
+import org.modelica.xtext.services.ModelicaBaseGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+public class InternalModelicaBaseParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_SEMICOLON", "RULE_IDENT", "RULE_EQUALS", "RULE_LPAR", "RULE_COMMA", "RULE_COLON", "RULE_RPAR", "RULE_STRING", "RULE_ASSIGN", "RULE_DOT", "RULE_LESS", "RULE_LESSEQ", "RULE_GREATER", "RULE_GREATEREQ", "RULE_EQEQ", "RULE_LESSGT", "RULE_PLUS", "RULE_MINUS", "RULE_PLUS_EW", "RULE_MINUS_EW", "RULE_STAR", "RULE_SLASH", "RULE_STAR_EW", "RULE_SLASH_EW", "RULE_POWER", "RULE_POWER_EW", "RULE_UNSIGNED_INTEGER", "RULE_UNSIGNED_REAL", "RULE_LBRACK", "RULE_RBRACK", "RULE_LBRACE", "RULE_RBRACE", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'within'", "'final'", "'encapsulated'", "'partial'", "'expandable'", "'extends'", "'end'", "'function'", "'der'", "'overload'", "'enumeration'", "'external'", "'public'", "'protected'", "'redeclare'", "'inner'", "'outer'", "'replaceable'", "'import'", "'constrainedby'", "'flow'", "'stream'", "'discrete'", "'parameter'", "'constant'", "'input'", "'output'", "'if'", "'each'", "'equation'", "'algorithm'", "'initial'", "'break'", "'return'", "'then'", "'else'", "'for'", "'loop'", "'while'", "'when'", "'elsewhen'", "'elseif'", "'connect'", "'in'", "'or'", "'and'", "'not'", "'false'", "'true'", "'annotation'", "'class'", "'model'", "'record'", "'block'", "'connector'", "'type'", "'package'"
+    };
+    public static final int RULE_MINUS_EW=23;
+    public static final int RULE_ID=36;
+    public static final int RULE_GREATER=16;
+    public static final int RULE_SLASH_EW=27;
+    public static final int RULE_RBRACE=35;
+    public static final int RULE_LPAR=7;
+    public static final int RULE_RBRACK=33;
+    public static final int RULE_PLUS_EW=22;
+    public static final int RULE_SEMICOLON=4;
+    public static final int RULE_ANY_OTHER=41;
+    public static final int RULE_STAR_EW=26;
+    public static final int RULE_POWER_EW=29;
+    public static final int RULE_PLUS=20;
+    public static final int RULE_COMMA=8;
+    public static final int RULE_SL_COMMENT=39;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=38;
+    public static final int RULE_ASSIGN=12;
+    public static final int RULE_MINUS=21;
+    public static final int RULE_COLON=9;
+    public static final int RULE_LESSEQ=15;
+    public static final int RULE_STRING=11;
+    public static final int RULE_DOT=13;
+    public static final int RULE_UNSIGNED_INTEGER=30;
+    public static final int RULE_STAR=24;
+    public static final int RULE_LESSGT=19;
+    public static final int RULE_RPAR=10;
+    public static final int RULE_IDENT=5;
+    public static final int RULE_EQEQ=18;
+    public static final int RULE_LBRACK=32;
+    public static final int RULE_INT=37;
+    public static final int RULE_LESS=14;
+    public static final int RULE_LBRACE=34;
+    public static final int RULE_EQUALS=6;
+    public static final int RULE_SLASH=25;
+    public static final int RULE_POWER=28;
+    public static final int RULE_WS=40;
+    public static final int RULE_UNSIGNED_REAL=31;
+    public static final int RULE_GREATEREQ=17;
+
+        public InternalModelicaBaseParser(TokenStream input) {
+            super(input);
+        }
+        
+
+    public String[] getTokenNames() { return tokenNames; }
+    public String getGrammarFileName() { return "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g"; }
+
+
+     
+     	private ModelicaBaseGrammarAccess grammarAccess;
+     	
+        public InternalModelicaBaseParser(TokenStream input, IAstFactory factory, ModelicaBaseGrammarAccess grammarAccess) {
+            this(input);
+            this.factory = factory;
+            registerRules(grammarAccess.getGrammar());
+            this.grammarAccess = grammarAccess;
+        }
+        
+        @Override
+        protected InputStream getTokenFile() {
+        	ClassLoader classLoader = getClass().getClassLoader();
+        	return classLoader.getResourceAsStream("org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.tokens");
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "StorageUnit";	
+       	} 
+
+
+
+    // $ANTLR start entryRuleStorageUnit
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:73:1: entryRuleStorageUnit returns [EObject current=null] : iv_ruleStorageUnit= ruleStorageUnit EOF ;
+    public final EObject entryRuleStorageUnit() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleStorageUnit = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:73:53: (iv_ruleStorageUnit= ruleStorageUnit EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:74:2: iv_ruleStorageUnit= ruleStorageUnit EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getStorageUnitRule(), currentNode); 
+            pushFollow(FOLLOW_ruleStorageUnit_in_entryRuleStorageUnit73);
+            iv_ruleStorageUnit=ruleStorageUnit();
+            _fsp--;
+
+             current =iv_ruleStorageUnit; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStorageUnit83); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleStorageUnit
+
+
+    // $ANTLR start ruleStorageUnit
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:81:1: ruleStorageUnit returns [EObject current=null] : ( ( 'within' ( rulename_path )? RULE_SEMICOLON )? ( ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';' )* ) ;
+    public final EObject ruleStorageUnit() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_classDefinition_4 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:86:6: ( ( ( 'within' ( rulename_path )? RULE_SEMICOLON )? ( ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';' )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:87:1: ( ( 'within' ( rulename_path )? RULE_SEMICOLON )? ( ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';' )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:87:1: ( ( 'within' ( rulename_path )? RULE_SEMICOLON )? ( ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';' )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:87:2: ( 'within' ( rulename_path )? RULE_SEMICOLON )? ( ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';' )*
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:87:2: ( 'within' ( rulename_path )? RULE_SEMICOLON )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==42) ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:87:3: 'within' ( rulename_path )? RULE_SEMICOLON
+                    {
+                    match(input,42,FOLLOW_42_in_ruleStorageUnit118); 
+
+                            createLeafNode(grammarAccess.getStorageUnitAccess().getWithinKeyword_0_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:91:1: ( rulename_path )?
+                    int alt1=2;
+                    int LA1_0 = input.LA(1);
+
+                    if ( (LA1_0==RULE_IDENT) ) {
+                        alt1=1;
+                    }
+                    switch (alt1) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:91:2: rulename_path
+                            {
+                            pushFollow(FOLLOW_rulename_path_in_ruleStorageUnit128);
+                            rulename_path();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+                    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleStorageUnit131); 
+                     
+                        createLeafNode(grammarAccess.getStorageUnitAccess().getSEMICOLONTerminalRuleCall_0_2(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:95:3: ( ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';' )*
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( ((LA4_0>=43 && LA4_0<=46)||LA4_0==49||(LA4_0>=92 && LA4_0<=98)) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:95:4: ( 'final' )? (lv_classDefinition_4= ruleClassDefinition ) ';'
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:95:4: ( 'final' )?
+            	    int alt3=2;
+            	    int LA3_0 = input.LA(1);
+
+            	    if ( (LA3_0==43) ) {
+            	        alt3=1;
+            	    }
+            	    switch (alt3) {
+            	        case 1 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:95:5: 'final'
+            	            {
+            	            match(input,43,FOLLOW_43_in_ruleStorageUnit143); 
+
+            	                    createLeafNode(grammarAccess.getStorageUnitAccess().getFinalKeyword_1_0(), null); 
+            	                
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:99:3: (lv_classDefinition_4= ruleClassDefinition )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:102:6: lv_classDefinition_4= ruleClassDefinition
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getStorageUnitAccess().getClassDefinitionClassDefinitionParserRuleCall_1_1_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleClassDefinition_in_ruleStorageUnit179);
+            	    lv_classDefinition_4=ruleClassDefinition();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getStorageUnitRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "classDefinition", lv_classDefinition_4, "ClassDefinition", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleStorageUnit192); 
+
+            	            createLeafNode(grammarAccess.getStorageUnitAccess().getSemicolonKeyword_1_2(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop4;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleStorageUnit
+
+
+    // $ANTLR start entryRuleClassDefinition
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:133:1: entryRuleClassDefinition returns [EObject current=null] : iv_ruleClassDefinition= ruleClassDefinition EOF ;
+    public final EObject entryRuleClassDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleClassDefinition = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:133:57: (iv_ruleClassDefinition= ruleClassDefinition EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:134:2: iv_ruleClassDefinition= ruleClassDefinition EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getClassDefinitionRule(), currentNode); 
+            pushFollow(FOLLOW_ruleClassDefinition_in_entryRuleClassDefinition229);
+            iv_ruleClassDefinition=ruleClassDefinition();
+            _fsp--;
+
+             current =iv_ruleClassDefinition; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleClassDefinition239); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleClassDefinition
+
+
+    // $ANTLR start ruleClassDefinition
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:141:1: ruleClassDefinition returns [EObject current=null] : ( (lv_encapsulated_0= 'encapsulated' )? (lv_partial_1= 'partial' )? (lv_expandable_2= 'expandable' )? (lv_classType_3= ruleClassType ) ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) ) (lv_elemList_10= ruleElementList ) ( (lv_elemList_11= ruleElementList2 ) | (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause ) | (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause ) | (lv_equationClauses_14= ruleequation_rule_clause ) | (lv_algorithmClauses_15= rulealgorithm_clause ) )* (lv_extClause_16= ruleexternal_clause )? 'end' RULE_IDENT ) ;
+    public final EObject ruleClassDefinition() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_encapsulated_0=null;
+        Token lv_partial_1=null;
+        Token lv_expandable_2=null;
+        Token lv_name_4=null;
+        Enumerator lv_classType_3 = null;
+
+        AntlrDatatypeRuleToken lv_comment_5 = null;
+
+        EObject lv_modification_8 = null;
+
+        EObject lv_elemList_10 = null;
+
+        EObject lv_elemList_11 = null;
+
+        EObject lv_initialEquationClauses_12 = null;
+
+        EObject lv_initialAlgorithmClauses_13 = null;
+
+        EObject lv_equationClauses_14 = null;
+
+        EObject lv_algorithmClauses_15 = null;
+
+        EObject lv_extClause_16 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:146:6: ( ( (lv_encapsulated_0= 'encapsulated' )? (lv_partial_1= 'partial' )? (lv_expandable_2= 'expandable' )? (lv_classType_3= ruleClassType ) ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) ) (lv_elemList_10= ruleElementList ) ( (lv_elemList_11= ruleElementList2 ) | (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause ) | (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause ) | (lv_equationClauses_14= ruleequation_rule_clause ) | (lv_algorithmClauses_15= rulealgorithm_clause ) )* (lv_extClause_16= ruleexternal_clause )? 'end' RULE_IDENT ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:147:1: ( (lv_encapsulated_0= 'encapsulated' )? (lv_partial_1= 'partial' )? (lv_expandable_2= 'expandable' )? (lv_classType_3= ruleClassType ) ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) ) (lv_elemList_10= ruleElementList ) ( (lv_elemList_11= ruleElementList2 ) | (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause ) | (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause ) | (lv_equationClauses_14= ruleequation_rule_clause ) | (lv_algorithmClauses_15= rulealgorithm_clause ) )* (lv_extClause_16= ruleexternal_clause )? 'end' RULE_IDENT )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:147:1: ( (lv_encapsulated_0= 'encapsulated' )? (lv_partial_1= 'partial' )? (lv_expandable_2= 'expandable' )? (lv_classType_3= ruleClassType ) ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) ) (lv_elemList_10= ruleElementList ) ( (lv_elemList_11= ruleElementList2 ) | (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause ) | (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause ) | (lv_equationClauses_14= ruleequation_rule_clause ) | (lv_algorithmClauses_15= rulealgorithm_clause ) )* (lv_extClause_16= ruleexternal_clause )? 'end' RULE_IDENT )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:147:2: (lv_encapsulated_0= 'encapsulated' )? (lv_partial_1= 'partial' )? (lv_expandable_2= 'expandable' )? (lv_classType_3= ruleClassType ) ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) ) (lv_elemList_10= ruleElementList ) ( (lv_elemList_11= ruleElementList2 ) | (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause ) | (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause ) | (lv_equationClauses_14= ruleequation_rule_clause ) | (lv_algorithmClauses_15= rulealgorithm_clause ) )* (lv_extClause_16= ruleexternal_clause )? 'end' RULE_IDENT
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:147:2: (lv_encapsulated_0= 'encapsulated' )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==44) ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:149:6: lv_encapsulated_0= 'encapsulated'
+                    {
+                    lv_encapsulated_0=(Token)input.LT(1);
+                    match(input,44,FOLLOW_44_in_ruleClassDefinition285); 
+
+                            createLeafNode(grammarAccess.getClassDefinitionAccess().getEncapsulatedEncapsulatedKeyword_0_0(), "encapsulated"); 
+                        
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "encapsulated", true, "encapsulated", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:168:3: (lv_partial_1= 'partial' )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==45) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:170:6: lv_partial_1= 'partial'
+                    {
+                    lv_partial_1=(Token)input.LT(1);
+                    match(input,45,FOLLOW_45_in_ruleClassDefinition320); 
+
+                            createLeafNode(grammarAccess.getClassDefinitionAccess().getPartialPartialKeyword_1_0(), "partial"); 
+                        
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "partial", true, "partial", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:189:3: (lv_expandable_2= 'expandable' )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==46) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:191:6: lv_expandable_2= 'expandable'
+                    {
+                    lv_expandable_2=(Token)input.LT(1);
+                    match(input,46,FOLLOW_46_in_ruleClassDefinition355); 
+
+                            createLeafNode(grammarAccess.getClassDefinitionAccess().getExpandableExpandableKeyword_2_0(), "expandable"); 
+                        
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "expandable", true, "expandable", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:210:3: (lv_classType_3= ruleClassType )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:213:6: lv_classType_3= ruleClassType
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getClassTypeClassTypeEnumRuleCall_3_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleClassType_in_ruleClassDefinition403);
+            lv_classType_3=ruleClassType();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "classType", lv_classType_3, "ClassType", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:231:2: ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) )
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==RULE_IDENT) ) {
+                alt11=1;
+            }
+            else if ( (LA11_0==47) ) {
+                alt11=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("231:2: ( ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? ) | ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? ) )", 11, 0, input);
+
+                throw nvae;
+            }
+            switch (alt11) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:231:3: ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:231:3: ( (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:231:4: (lv_name_4= RULE_IDENT ) (lv_comment_5= rulestring_comment )?
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:231:4: (lv_name_4= RULE_IDENT )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:233:6: lv_name_4= RULE_IDENT
+                    {
+                    lv_name_4=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleClassDefinition431); 
+
+                    		createLeafNode(grammarAccess.getClassDefinitionAccess().getNameIDENTTerminalRuleCall_4_0_0_0(), "name"); 
+                    	
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "name", lv_name_4, "IDENT", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:251:2: (lv_comment_5= rulestring_comment )?
+                    int alt8=2;
+                    int LA8_0 = input.LA(1);
+
+                    if ( (LA8_0==RULE_STRING) ) {
+                        alt8=1;
+                    }
+                    switch (alt8) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:254:6: lv_comment_5= rulestring_comment
+                            {
+                             
+                            	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getCommentString_commentParserRuleCall_4_0_1_0(), currentNode); 
+                            	    
+                            pushFollow(FOLLOW_rulestring_comment_in_ruleClassDefinition473);
+                            lv_comment_5=rulestring_comment();
+                            _fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                            	        }
+                            	        
+                            	        try {
+                            	       		set(current, "comment", lv_comment_5, "string_comment", currentNode);
+                            	        } catch (ValueConverterException vce) {
+                            				handleValueConverterException(vce);
+                            	        }
+                            	        currentNode = currentNode.getParent();
+                            	    
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:273:6: ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:273:6: ( 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:273:7: 'extends' RULE_IDENT (lv_modification_8= ruleclass_modification )? ( rulestring_comment )?
+                    {
+                    match(input,47,FOLLOW_47_in_ruleClassDefinition495); 
+
+                            createLeafNode(grammarAccess.getClassDefinitionAccess().getExtendsKeyword_4_1_0(), null); 
+                        
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleClassDefinition504); 
+                     
+                        createLeafNode(grammarAccess.getClassDefinitionAccess().getIDENTTerminalRuleCall_4_1_1(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:281:1: (lv_modification_8= ruleclass_modification )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0==RULE_LPAR) ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:284:6: lv_modification_8= ruleclass_modification
+                            {
+                             
+                            	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getModificationClass_modificationParserRuleCall_4_1_2_0(), currentNode); 
+                            	    
+                            pushFollow(FOLLOW_ruleclass_modification_in_ruleClassDefinition537);
+                            lv_modification_8=ruleclass_modification();
+                            _fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                            	        }
+                            	        
+                            	        try {
+                            	       		set(current, "modification", lv_modification_8, "class_modification", currentNode);
+                            	        } catch (ValueConverterException vce) {
+                            				handleValueConverterException(vce);
+                            	        }
+                            	        currentNode = currentNode.getParent();
+                            	    
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:302:3: ( rulestring_comment )?
+                    int alt10=2;
+                    int LA10_0 = input.LA(1);
+
+                    if ( (LA10_0==RULE_STRING) ) {
+                        alt10=1;
+                    }
+                    switch (alt10) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:302:4: rulestring_comment
+                            {
+                            pushFollow(FOLLOW_rulestring_comment_in_ruleClassDefinition552);
+                            rulestring_comment();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:302:26: (lv_elemList_10= ruleElementList )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:305:6: lv_elemList_10= ruleElementList
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getElemListElementListParserRuleCall_5_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleElementList_in_ruleClassDefinition582);
+            lv_elemList_10=ruleElementList();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		add(current, "elemList", lv_elemList_10, "ElementList", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:323:2: ( (lv_elemList_11= ruleElementList2 ) | (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause ) | (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause ) | (lv_equationClauses_14= ruleequation_rule_clause ) | (lv_algorithmClauses_15= rulealgorithm_clause ) )*
+            loop12:
+            do {
+                int alt12=6;
+                switch ( input.LA(1) ) {
+                case 54:
+                case 55:
+                    {
+                    alt12=1;
+                    }
+                    break;
+                case 73:
+                    {
+                    int LA12_3 = input.LA(2);
+
+                    if ( (LA12_3==72) ) {
+                        alt12=3;
+                    }
+                    else if ( (LA12_3==71) ) {
+                        alt12=2;
+                    }
+
+
+                    }
+                    break;
+                case 71:
+                    {
+                    alt12=4;
+                    }
+                    break;
+                case 72:
+                    {
+                    alt12=5;
+                    }
+                    break;
+
+                }
+
+                switch (alt12) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:323:3: (lv_elemList_11= ruleElementList2 )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:323:3: (lv_elemList_11= ruleElementList2 )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:326:6: lv_elemList_11= ruleElementList2
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getElemListElementList2ParserRuleCall_6_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleElementList2_in_ruleClassDefinition621);
+            	    lv_elemList_11=ruleElementList2();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "elemList", lv_elemList_11, "ElementList2", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:345:6: (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:345:6: (lv_initialEquationClauses_12= ruleinitial_equation_rule_clause )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:348:6: lv_initialEquationClauses_12= ruleinitial_equation_rule_clause
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getInitialEquationClausesInitial_equation_rule_clauseParserRuleCall_6_1_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleinitial_equation_rule_clause_in_ruleClassDefinition665);
+            	    lv_initialEquationClauses_12=ruleinitial_equation_rule_clause();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "initialEquationClauses", lv_initialEquationClauses_12, "initial_equation_rule_clause", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:367:6: (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:367:6: (lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:370:6: lv_initialAlgorithmClauses_13= ruleinitial_algorithm_clause
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getInitialAlgorithmClausesInitial_algorithm_clauseParserRuleCall_6_2_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleinitial_algorithm_clause_in_ruleClassDefinition709);
+            	    lv_initialAlgorithmClauses_13=ruleinitial_algorithm_clause();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "initialAlgorithmClauses", lv_initialAlgorithmClauses_13, "initial_algorithm_clause", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 4 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:389:6: (lv_equationClauses_14= ruleequation_rule_clause )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:389:6: (lv_equationClauses_14= ruleequation_rule_clause )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:392:6: lv_equationClauses_14= ruleequation_rule_clause
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getEquationClausesEquation_rule_clauseParserRuleCall_6_3_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_clause_in_ruleClassDefinition753);
+            	    lv_equationClauses_14=ruleequation_rule_clause();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "equationClauses", lv_equationClauses_14, "equation_rule_clause", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 5 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:411:6: (lv_algorithmClauses_15= rulealgorithm_clause )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:411:6: (lv_algorithmClauses_15= rulealgorithm_clause )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:414:6: lv_algorithmClauses_15= rulealgorithm_clause
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getAlgorithmClausesAlgorithm_clauseParserRuleCall_6_4_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulealgorithm_clause_in_ruleClassDefinition797);
+            	    lv_algorithmClauses_15=rulealgorithm_clause();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "algorithmClauses", lv_algorithmClauses_15, "algorithm_clause", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop12;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:432:4: (lv_extClause_16= ruleexternal_clause )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==53) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:435:6: lv_extClause_16= ruleexternal_clause
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getClassDefinitionAccess().getExtClauseExternal_clauseParserRuleCall_7_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleexternal_clause_in_ruleClassDefinition837);
+                    lv_extClause_16=ruleexternal_clause();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClassDefinitionRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "extClause", lv_extClause_16, "external_clause", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            match(input,48,FOLLOW_48_in_ruleClassDefinition851); 
+
+                    createLeafNode(grammarAccess.getClassDefinitionAccess().getEndKeyword_8(), null); 
+                
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleClassDefinition860); 
+             
+                createLeafNode(grammarAccess.getClassDefinitionAccess().getIDENTTerminalRuleCall_9(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleClassDefinition
+
+
+    // $ANTLR start entryRulePartialDerivative
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:468:1: entryRulePartialDerivative returns [EObject current=null] : iv_rulePartialDerivative= rulePartialDerivative EOF ;
+    public final EObject entryRulePartialDerivative() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulePartialDerivative = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:468:59: (iv_rulePartialDerivative= rulePartialDerivative EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:469:2: iv_rulePartialDerivative= rulePartialDerivative EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getPartialDerivativeRule(), currentNode); 
+            pushFollow(FOLLOW_rulePartialDerivative_in_entryRulePartialDerivative892);
+            iv_rulePartialDerivative=rulePartialDerivative();
+            _fsp--;
+
+             current =iv_rulePartialDerivative; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulePartialDerivative902); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulePartialDerivative
+
+
+    // $ANTLR start rulePartialDerivative
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:476:1: rulePartialDerivative returns [EObject current=null] : ( 'function' (lv_name_1= RULE_IDENT ) RULE_EQUALS 'der' '(' rulename_path ',' ruleident_list ')' (lv_comment_9= rulecomment ) ) ;
+    public final EObject rulePartialDerivative() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_1=null;
+        EObject lv_comment_9 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:481:6: ( ( 'function' (lv_name_1= RULE_IDENT ) RULE_EQUALS 'der' '(' rulename_path ',' ruleident_list ')' (lv_comment_9= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:482:1: ( 'function' (lv_name_1= RULE_IDENT ) RULE_EQUALS 'der' '(' rulename_path ',' ruleident_list ')' (lv_comment_9= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:482:1: ( 'function' (lv_name_1= RULE_IDENT ) RULE_EQUALS 'der' '(' rulename_path ',' ruleident_list ')' (lv_comment_9= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:482:2: 'function' (lv_name_1= RULE_IDENT ) RULE_EQUALS 'der' '(' rulename_path ',' ruleident_list ')' (lv_comment_9= rulecomment )
+            {
+            match(input,49,FOLLOW_49_in_rulePartialDerivative936); 
+
+                    createLeafNode(grammarAccess.getPartialDerivativeAccess().getFunctionKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:486:1: (lv_name_1= RULE_IDENT )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:488:6: lv_name_1= RULE_IDENT
+            {
+            lv_name_1=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulePartialDerivative958); 
+
+            		createLeafNode(grammarAccess.getPartialDerivativeAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getPartialDerivativeRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "name", lv_name_1, "IDENT", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_rulePartialDerivative975); 
+             
+                createLeafNode(grammarAccess.getPartialDerivativeAccess().getEQUALSTerminalRuleCall_2(), null); 
+                
+            match(input,50,FOLLOW_50_in_rulePartialDerivative983); 
+
+                    createLeafNode(grammarAccess.getPartialDerivativeAccess().getDerKeyword_3(), null); 
+                
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_rulePartialDerivative992); 
+
+                    createLeafNode(grammarAccess.getPartialDerivativeAccess().getLeftParenthesisKeyword_4(), null); 
+                
+            pushFollow(FOLLOW_rulename_path_in_rulePartialDerivative1001);
+            rulename_path();
+            _fsp--;
+
+            match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulePartialDerivative1002); 
+
+                    createLeafNode(grammarAccess.getPartialDerivativeAccess().getCommaKeyword_6(), null); 
+                
+            pushFollow(FOLLOW_ruleident_list_in_rulePartialDerivative1011);
+            ruleident_list();
+            _fsp--;
+
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_rulePartialDerivative1012); 
+
+                    createLeafNode(grammarAccess.getPartialDerivativeAccess().getRightParenthesisKeyword_8(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:526:1: (lv_comment_9= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:529:6: lv_comment_9= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getPartialDerivativeAccess().getCommentCommentParserRuleCall_9_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_rulePartialDerivative1046);
+            lv_comment_9=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getPartialDerivativeRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_9, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulePartialDerivative
+
+
+    // $ANTLR start entryRuleClassModification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:554:1: entryRuleClassModification returns [EObject current=null] : iv_ruleClassModification= ruleClassModification EOF ;
+    public final EObject entryRuleClassModification() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleClassModification = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:554:59: (iv_ruleClassModification= ruleClassModification EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:555:2: iv_ruleClassModification= ruleClassModification EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getClassModificationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleClassModification_in_entryRuleClassModification1083);
+            iv_ruleClassModification=ruleClassModification();
+            _fsp--;
+
+             current =iv_ruleClassModification; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleClassModification1093); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleClassModification
+
+
+    // $ANTLR start ruleClassModification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:562:1: ruleClassModification returns [EObject current=null] : ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS ruletype_prefix (lv_typeSpecifier_4= ruletype_specifier ) (lv_modification_5= ruleclass_modification )? (lv_comment_6= rulecomment ) ) ;
+    public final EObject ruleClassModification() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_1=null;
+        Enumerator lv_classType_0 = null;
+
+        EObject lv_typeSpecifier_4 = null;
+
+        EObject lv_modification_5 = null;
+
+        EObject lv_comment_6 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:567:6: ( ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS ruletype_prefix (lv_typeSpecifier_4= ruletype_specifier ) (lv_modification_5= ruleclass_modification )? (lv_comment_6= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:568:1: ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS ruletype_prefix (lv_typeSpecifier_4= ruletype_specifier ) (lv_modification_5= ruleclass_modification )? (lv_comment_6= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:568:1: ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS ruletype_prefix (lv_typeSpecifier_4= ruletype_specifier ) (lv_modification_5= ruleclass_modification )? (lv_comment_6= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:568:2: (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS ruletype_prefix (lv_typeSpecifier_4= ruletype_specifier ) (lv_modification_5= ruleclass_modification )? (lv_comment_6= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:568:2: (lv_classType_0= ruleClassType )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:571:6: lv_classType_0= ruleClassType
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getClassTypeClassTypeEnumRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleClassType_in_ruleClassModification1152);
+            lv_classType_0=ruleClassType();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "classType", lv_classType_0, "ClassType", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:589:2: (lv_name_1= RULE_IDENT )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:591:6: lv_name_1= RULE_IDENT
+            {
+            lv_name_1=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleClassModification1178); 
+
+            		createLeafNode(grammarAccess.getClassModificationAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "name", lv_name_1, "IDENT", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleClassModification1195); 
+             
+                createLeafNode(grammarAccess.getClassModificationAccess().getEQUALSTerminalRuleCall_2(), null); 
+                
+            pushFollow(FOLLOW_ruletype_prefix_in_ruleClassModification1203);
+            ruletype_prefix();
+            _fsp--;
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:613:16: (lv_typeSpecifier_4= ruletype_specifier )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:616:6: lv_typeSpecifier_4= ruletype_specifier
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getTypeSpecifierType_specifierParserRuleCall_4_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruletype_specifier_in_ruleClassModification1229);
+            lv_typeSpecifier_4=ruletype_specifier();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "typeSpecifier", lv_typeSpecifier_4, "type_specifier", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:634:2: (lv_modification_5= ruleclass_modification )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==RULE_LPAR) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:637:6: lv_modification_5= ruleclass_modification
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getModificationClass_modificationParserRuleCall_5_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleclass_modification_in_ruleClassModification1267);
+                    lv_modification_5=ruleclass_modification();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "modification", lv_modification_5, "class_modification", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:655:3: (lv_comment_6= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:658:6: lv_comment_6= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassModificationAccess().getCommentCommentParserRuleCall_6_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleClassModification1306);
+            lv_comment_6=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassModificationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_6, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleClassModification
+
+
+    // $ANTLR start entryRuleClassOverloading
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:683:1: entryRuleClassOverloading returns [EObject current=null] : iv_ruleClassOverloading= ruleClassOverloading EOF ;
+    public final EObject entryRuleClassOverloading() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleClassOverloading = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:683:58: (iv_ruleClassOverloading= ruleClassOverloading EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:684:2: iv_ruleClassOverloading= ruleClassOverloading EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getClassOverloadingRule(), currentNode); 
+            pushFollow(FOLLOW_ruleClassOverloading_in_entryRuleClassOverloading1343);
+            iv_ruleClassOverloading=ruleClassOverloading();
+            _fsp--;
+
+             current =iv_ruleClassOverloading; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleClassOverloading1353); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleClassOverloading
+
+
+    // $ANTLR start ruleClassOverloading
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:691:1: ruleClassOverloading returns [EObject current=null] : ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'overload' '(' rulename_list ')' (lv_comment_7= rulecomment ) ) ;
+    public final EObject ruleClassOverloading() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_1=null;
+        Enumerator lv_classType_0 = null;
+
+        EObject lv_comment_7 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:696:6: ( ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'overload' '(' rulename_list ')' (lv_comment_7= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:697:1: ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'overload' '(' rulename_list ')' (lv_comment_7= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:697:1: ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'overload' '(' rulename_list ')' (lv_comment_7= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:697:2: (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'overload' '(' rulename_list ')' (lv_comment_7= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:697:2: (lv_classType_0= ruleClassType )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:700:6: lv_classType_0= ruleClassType
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassOverloadingAccess().getClassTypeClassTypeEnumRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleClassType_in_ruleClassOverloading1412);
+            lv_classType_0=ruleClassType();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassOverloadingRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "classType", lv_classType_0, "ClassType", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:718:2: (lv_name_1= RULE_IDENT )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:720:6: lv_name_1= RULE_IDENT
+            {
+            lv_name_1=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleClassOverloading1438); 
+
+            		createLeafNode(grammarAccess.getClassOverloadingAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassOverloadingRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "name", lv_name_1, "IDENT", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleClassOverloading1455); 
+             
+                createLeafNode(grammarAccess.getClassOverloadingAccess().getEQUALSTerminalRuleCall_2(), null); 
+                
+            match(input,51,FOLLOW_51_in_ruleClassOverloading1463); 
+
+                    createLeafNode(grammarAccess.getClassOverloadingAccess().getOverloadKeyword_3(), null); 
+                
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_ruleClassOverloading1472); 
+
+                    createLeafNode(grammarAccess.getClassOverloadingAccess().getLeftParenthesisKeyword_4(), null); 
+                
+            pushFollow(FOLLOW_rulename_list_in_ruleClassOverloading1481);
+            rulename_list();
+            _fsp--;
+
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_ruleClassOverloading1482); 
+
+                    createLeafNode(grammarAccess.getClassOverloadingAccess().getRightParenthesisKeyword_6(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:754:1: (lv_comment_7= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:757:6: lv_comment_7= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getClassOverloadingAccess().getCommentCommentParserRuleCall_7_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleClassOverloading1516);
+            lv_comment_7=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getClassOverloadingRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_7, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleClassOverloading
+
+
+    // $ANTLR start entryRuleEnumeration
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:782:1: entryRuleEnumeration returns [EObject current=null] : iv_ruleEnumeration= ruleEnumeration EOF ;
+    public final EObject entryRuleEnumeration() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleEnumeration = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:782:53: (iv_ruleEnumeration= ruleEnumeration EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:783:2: iv_ruleEnumeration= ruleEnumeration EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getEnumerationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleEnumeration_in_entryRuleEnumeration1553);
+            iv_ruleEnumeration=ruleEnumeration();
+            _fsp--;
+
+             current =iv_ruleEnumeration; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEnumeration1563); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleEnumeration
+
+
+    // $ANTLR start ruleEnumeration
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:790:1: ruleEnumeration returns [EObject current=null] : ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'enumeration' RULE_LPAR ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON ) RULE_RPAR (lv_comment_12= rulecomment ) ) ;
+    public final EObject ruleEnumeration() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_1=null;
+        Token lv_ident_5=null;
+        Token lv_ident_8=null;
+        Enumerator lv_classType_0 = null;
+
+        EObject lv_enumComments_6 = null;
+
+        EObject lv_enumComments_9 = null;
+
+        EObject lv_comment_12 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:795:6: ( ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'enumeration' RULE_LPAR ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON ) RULE_RPAR (lv_comment_12= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:796:1: ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'enumeration' RULE_LPAR ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON ) RULE_RPAR (lv_comment_12= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:796:1: ( (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'enumeration' RULE_LPAR ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON ) RULE_RPAR (lv_comment_12= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:796:2: (lv_classType_0= ruleClassType ) (lv_name_1= RULE_IDENT ) RULE_EQUALS 'enumeration' RULE_LPAR ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON ) RULE_RPAR (lv_comment_12= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:796:2: (lv_classType_0= ruleClassType )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:799:6: lv_classType_0= ruleClassType
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getClassTypeClassTypeEnumRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleClassType_in_ruleEnumeration1622);
+            lv_classType_0=ruleClassType();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "classType", lv_classType_0, "ClassType", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:817:2: (lv_name_1= RULE_IDENT )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:819:6: lv_name_1= RULE_IDENT
+            {
+            lv_name_1=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleEnumeration1648); 
+
+            		createLeafNode(grammarAccess.getEnumerationAccess().getNameIDENTTerminalRuleCall_1_0(), "name"); 
+            	
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "name", lv_name_1, "IDENT", lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleEnumeration1665); 
+             
+                createLeafNode(grammarAccess.getEnumerationAccess().getEQUALSTerminalRuleCall_2(), null); 
+                
+            match(input,52,FOLLOW_52_in_ruleEnumeration1673); 
+
+                    createLeafNode(grammarAccess.getEnumerationAccess().getEnumerationKeyword_3(), null); 
+                
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_ruleEnumeration1682); 
+             
+                createLeafNode(grammarAccess.getEnumerationAccess().getLPARTerminalRuleCall_4(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:849:1: ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON )
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==RULE_IDENT) ) {
+                alt16=1;
+            }
+            else if ( (LA16_0==RULE_COLON) ) {
+                alt16=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("849:1: ( ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* ) | RULE_COLON )", 16, 0, input);
+
+                throw nvae;
+            }
+            switch (alt16) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:849:2: ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:849:2: ( (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )* )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:849:3: (lv_ident_5= RULE_IDENT ) (lv_enumComments_6= rulecomment ) ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )*
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:849:3: (lv_ident_5= RULE_IDENT )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:851:6: lv_ident_5= RULE_IDENT
+                    {
+                    lv_ident_5=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleEnumeration1705); 
+
+                    		createLeafNode(grammarAccess.getEnumerationAccess().getIdentIDENTTerminalRuleCall_5_0_0_0(), "ident"); 
+                    	
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		add(current, "ident", lv_ident_5, "IDENT", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:869:2: (lv_enumComments_6= rulecomment )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:872:6: lv_enumComments_6= rulecomment
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getEnumCommentsCommentParserRuleCall_5_0_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulecomment_in_ruleEnumeration1747);
+                    lv_enumComments_6=rulecomment();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		add(current, "enumComments", lv_enumComments_6, "comment", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:890:2: ( RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment ) )*
+                    loop15:
+                    do {
+                        int alt15=2;
+                        int LA15_0 = input.LA(1);
+
+                        if ( (LA15_0==RULE_COMMA) ) {
+                            alt15=1;
+                        }
+
+
+                        switch (alt15) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:890:3: RULE_COMMA (lv_ident_8= RULE_IDENT ) (lv_enumComments_9= rulecomment )
+                    	    {
+                    	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_ruleEnumeration1761); 
+                    	     
+                    	        createLeafNode(grammarAccess.getEnumerationAccess().getCOMMATerminalRuleCall_5_0_2_0(), null); 
+                    	        
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:894:1: (lv_ident_8= RULE_IDENT )
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:896:6: lv_ident_8= RULE_IDENT
+                    	    {
+                    	    lv_ident_8=(Token)input.LT(1);
+                    	    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleEnumeration1782); 
+
+                    	    		createLeafNode(grammarAccess.getEnumerationAccess().getIdentIDENTTerminalRuleCall_5_0_2_1_0(), "ident"); 
+                    	    	
+
+                    	    	        if (current==null) {
+                    	    	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+                    	    	            associateNodeWithAstElement(currentNode, current);
+                    	    	        }
+                    	    	        
+                    	    	        try {
+                    	    	       		add(current, "ident", lv_ident_8, "IDENT", lastConsumedNode);
+                    	    	        } catch (ValueConverterException vce) {
+                    	    				handleValueConverterException(vce);
+                    	    	        }
+                    	    	    
+
+                    	    }
+
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:914:2: (lv_enumComments_9= rulecomment )
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:917:6: lv_enumComments_9= rulecomment
+                    	    {
+                    	     
+                    	    	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getEnumCommentsCommentParserRuleCall_5_0_2_2_0(), currentNode); 
+                    	    	    
+                    	    pushFollow(FOLLOW_rulecomment_in_ruleEnumeration1824);
+                    	    lv_enumComments_9=rulecomment();
+                    	    _fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	    	        }
+                    	    	        
+                    	    	        try {
+                    	    	       		add(current, "enumComments", lv_enumComments_9, "comment", currentNode);
+                    	    	        } catch (ValueConverterException vce) {
+                    	    				handleValueConverterException(vce);
+                    	    	        }
+                    	    	        currentNode = currentNode.getParent();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop15;
+                        }
+                    } while (true);
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:936:6: RULE_COLON
+                    {
+                    match(input,RULE_COLON,FOLLOW_RULE_COLON_in_ruleEnumeration1846); 
+                     
+                        createLeafNode(grammarAccess.getEnumerationAccess().getCOLONTerminalRuleCall_5_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_ruleEnumeration1855); 
+             
+                createLeafNode(grammarAccess.getEnumerationAccess().getRPARTerminalRuleCall_6(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:944:1: (lv_comment_12= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:947:6: lv_comment_12= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getEnumerationAccess().getCommentCommentParserRuleCall_7_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleEnumeration1888);
+            lv_comment_12=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getEnumerationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_12, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleEnumeration
+
+
+    // $ANTLR start entryRuleident_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:972:1: entryRuleident_list returns [String current=null] : iv_ruleident_list= ruleident_list EOF ;
+    public final String entryRuleident_list() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleident_list = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:972:51: (iv_ruleident_list= ruleident_list EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:973:2: iv_ruleident_list= ruleident_list EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getIdent_listRule(), currentNode); 
+            pushFollow(FOLLOW_ruleident_list_in_entryRuleident_list1926);
+            iv_ruleident_list=ruleident_list();
+            _fsp--;
+
+             current =iv_ruleident_list.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleident_list1937); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleident_list
+
+
+    // $ANTLR start ruleident_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:980:1: ruleident_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT (this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT )* ) ;
+    public final AntlrDatatypeRuleToken ruleident_list() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token this_COMMA_1=null;
+        Token this_IDENT_2=null;
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:986:6: ( (this_IDENT_0= RULE_IDENT (this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:987:1: (this_IDENT_0= RULE_IDENT (this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:987:1: (this_IDENT_0= RULE_IDENT (this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:987:6: this_IDENT_0= RULE_IDENT (this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT )*
+            {
+            this_IDENT_0=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleident_list1977); 
+
+            		current.merge(this_IDENT_0);
+                
+             
+                createLeafNode(grammarAccess.getIdent_listAccess().getIDENTTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:994:1: (this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( (LA17_0==RULE_COMMA) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:994:6: this_COMMA_1= RULE_COMMA this_IDENT_2= RULE_IDENT
+            	    {
+            	    this_COMMA_1=(Token)input.LT(1);
+            	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_ruleident_list1998); 
+
+            	    		current.merge(this_COMMA_1);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getIdent_listAccess().getCOMMATerminalRuleCall_1_0(), null); 
+            	        
+            	    this_IDENT_2=(Token)input.LT(1);
+            	    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleident_list2018); 
+
+            	    		current.merge(this_IDENT_2);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getIdent_listAccess().getIDENTTerminalRuleCall_1_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleident_list
+
+
+    // $ANTLR start entryRulename_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1016:1: entryRulename_list returns [String current=null] : iv_rulename_list= rulename_list EOF ;
+    public final String entryRulename_list() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulename_list = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1016:50: (iv_rulename_list= rulename_list EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1017:2: iv_rulename_list= rulename_list EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getName_listRule(), currentNode); 
+            pushFollow(FOLLOW_rulename_list_in_entryRulename_list2064);
+            iv_rulename_list=rulename_list();
+            _fsp--;
+
+             current =iv_rulename_list.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulename_list2075); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulename_list
+
+
+    // $ANTLR start rulename_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1024:1: rulename_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_name_path_0= rulename_path (kw= ',' this_name_path_2= rulename_path )* ) ;
+    public final AntlrDatatypeRuleToken rulename_list() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        AntlrDatatypeRuleToken this_name_path_0 = null;
+
+        AntlrDatatypeRuleToken this_name_path_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1030:6: ( (this_name_path_0= rulename_path (kw= ',' this_name_path_2= rulename_path )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1031:1: (this_name_path_0= rulename_path (kw= ',' this_name_path_2= rulename_path )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1031:1: (this_name_path_0= rulename_path (kw= ',' this_name_path_2= rulename_path )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1032:5: this_name_path_0= rulename_path (kw= ',' this_name_path_2= rulename_path )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getName_listAccess().getName_pathParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulename_path_in_rulename_list2122);
+            this_name_path_0=rulename_path();
+            _fsp--;
+
+
+            		current.merge(this_name_path_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1042:1: (kw= ',' this_name_path_2= rulename_path )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0==RULE_COMMA) ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1043:2: kw= ',' this_name_path_2= rulename_path
+            	    {
+            	    kw=(Token)input.LT(1);
+            	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulename_list2141); 
+
+            	            current.merge(kw);
+            	            createLeafNode(grammarAccess.getName_listAccess().getCommaKeyword_1_0(), null); 
+            	        
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getName_listAccess().getName_pathParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulename_path_in_rulename_list2163);
+            	    this_name_path_2=rulename_path();
+            	    _fsp--;
+
+
+            	    		current.merge(this_name_path_2);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulename_list
+
+
+    // $ANTLR start entryRuleexternal_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1067:1: entryRuleexternal_clause returns [EObject current=null] : iv_ruleexternal_clause= ruleexternal_clause EOF ;
+    public final EObject entryRuleexternal_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleexternal_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1067:57: (iv_ruleexternal_clause= ruleexternal_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1068:2: iv_ruleexternal_clause= ruleexternal_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getExternal_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleexternal_clause_in_entryRuleexternal_clause2208);
+            iv_ruleexternal_clause=ruleexternal_clause();
+            _fsp--;
+
+             current =iv_ruleexternal_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleexternal_clause2218); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleexternal_clause
+
+
+    // $ANTLR start ruleexternal_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1075:1: ruleexternal_clause returns [EObject current=null] : ( 'external' (lv_languageSpecification_1= RULE_STRING )? ( ruleexternal_function_call )? (lv_annotation_3= ruleannotation )? RULE_SEMICOLON ( (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON )? ) ;
+    public final EObject ruleexternal_clause() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_languageSpecification_1=null;
+        EObject lv_annotation_3 = null;
+
+        EObject lv_extAnnotation_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1080:6: ( ( 'external' (lv_languageSpecification_1= RULE_STRING )? ( ruleexternal_function_call )? (lv_annotation_3= ruleannotation )? RULE_SEMICOLON ( (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1081:1: ( 'external' (lv_languageSpecification_1= RULE_STRING )? ( ruleexternal_function_call )? (lv_annotation_3= ruleannotation )? RULE_SEMICOLON ( (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1081:1: ( 'external' (lv_languageSpecification_1= RULE_STRING )? ( ruleexternal_function_call )? (lv_annotation_3= ruleannotation )? RULE_SEMICOLON ( (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1081:2: 'external' (lv_languageSpecification_1= RULE_STRING )? ( ruleexternal_function_call )? (lv_annotation_3= ruleannotation )? RULE_SEMICOLON ( (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON )?
+            {
+            match(input,53,FOLLOW_53_in_ruleexternal_clause2252); 
+
+                    createLeafNode(grammarAccess.getExternal_clauseAccess().getExternalKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1085:1: (lv_languageSpecification_1= RULE_STRING )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==RULE_STRING) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1087:6: lv_languageSpecification_1= RULE_STRING
+                    {
+                    lv_languageSpecification_1=(Token)input.LT(1);
+                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleexternal_clause2274); 
+
+                    		createLeafNode(grammarAccess.getExternal_clauseAccess().getLanguageSpecificationSTRINGTerminalRuleCall_1_0(), "languageSpecification"); 
+                    	
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getExternal_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "languageSpecification", lv_languageSpecification_1, "STRING", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1105:3: ( ruleexternal_function_call )?
+            int alt20=2;
+            int LA20_0 = input.LA(1);
+
+            if ( (LA20_0==RULE_IDENT) ) {
+                alt20=1;
+            }
+            switch (alt20) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1105:4: ruleexternal_function_call
+                    {
+                    pushFollow(FOLLOW_ruleexternal_function_call_in_ruleexternal_clause2293);
+                    ruleexternal_function_call();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1105:32: (lv_annotation_3= ruleannotation )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==91) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1108:6: lv_annotation_3= ruleannotation
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getExternal_clauseAccess().getAnnotationAnnotationParserRuleCall_3_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleannotation_in_ruleexternal_clause2321);
+                    lv_annotation_3=ruleannotation();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getExternal_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "annotation", lv_annotation_3, "annotation", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleexternal_clause2335); 
+             
+                createLeafNode(grammarAccess.getExternal_clauseAccess().getSEMICOLONTerminalRuleCall_4(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1130:1: ( (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON )?
+            int alt22=2;
+            int LA22_0 = input.LA(1);
+
+            if ( (LA22_0==91) ) {
+                alt22=1;
+            }
+            switch (alt22) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1130:2: (lv_extAnnotation_5= ruleannotation ) RULE_SEMICOLON
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1130:2: (lv_extAnnotation_5= ruleannotation )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1133:6: lv_extAnnotation_5= ruleannotation
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getExternal_clauseAccess().getExtAnnotationAnnotationParserRuleCall_5_0_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleannotation_in_ruleexternal_clause2369);
+                    lv_extAnnotation_5=ruleannotation();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getExternal_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "extAnnotation", lv_extAnnotation_5, "annotation", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+                    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleexternal_clause2382); 
+                     
+                        createLeafNode(grammarAccess.getExternal_clauseAccess().getSEMICOLONTerminalRuleCall_5_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleexternal_clause
+
+
+    // $ANTLR start entryRuleexternal_function_call
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1162:1: entryRuleexternal_function_call returns [String current=null] : iv_ruleexternal_function_call= ruleexternal_function_call EOF ;
+    public final String entryRuleexternal_function_call() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleexternal_function_call = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1162:63: (iv_ruleexternal_function_call= ruleexternal_function_call EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1163:2: iv_ruleexternal_function_call= ruleexternal_function_call EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getExternal_function_callRule(), currentNode); 
+            pushFollow(FOLLOW_ruleexternal_function_call_in_entryRuleexternal_function_call2417);
+            iv_ruleexternal_function_call=ruleexternal_function_call();
+            _fsp--;
+
+             current =iv_ruleexternal_function_call.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleexternal_function_call2428); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleexternal_function_call
+
+
+    // $ANTLR start ruleexternal_function_call
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1170:1: ruleexternal_function_call returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS )? this_IDENT_2= RULE_IDENT this_LPAR_3= RULE_LPAR (this_expression_list_4= ruleexpression_list )? this_RPAR_5= RULE_RPAR ) ;
+    public final AntlrDatatypeRuleToken ruleexternal_function_call() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_EQUALS_1=null;
+        Token this_IDENT_2=null;
+        Token this_LPAR_3=null;
+        Token this_RPAR_5=null;
+        AntlrDatatypeRuleToken this_component_reference_0 = null;
+
+        AntlrDatatypeRuleToken this_expression_list_4 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1176:6: ( ( (this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS )? this_IDENT_2= RULE_IDENT this_LPAR_3= RULE_LPAR (this_expression_list_4= ruleexpression_list )? this_RPAR_5= RULE_RPAR ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1177:1: ( (this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS )? this_IDENT_2= RULE_IDENT this_LPAR_3= RULE_LPAR (this_expression_list_4= ruleexpression_list )? this_RPAR_5= RULE_RPAR )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1177:1: ( (this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS )? this_IDENT_2= RULE_IDENT this_LPAR_3= RULE_LPAR (this_expression_list_4= ruleexpression_list )? this_RPAR_5= RULE_RPAR )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1177:2: (this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS )? this_IDENT_2= RULE_IDENT this_LPAR_3= RULE_LPAR (this_expression_list_4= ruleexpression_list )? this_RPAR_5= RULE_RPAR
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1177:2: (this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
+
+            if ( (LA23_0==RULE_IDENT) ) {
+                int LA23_1 = input.LA(2);
+
+                if ( (LA23_1==RULE_EQUALS||LA23_1==RULE_DOT||LA23_1==RULE_LBRACK) ) {
+                    alt23=1;
+                }
+            }
+            switch (alt23) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1178:5: this_component_reference_0= rulecomponent_reference this_EQUALS_1= RULE_EQUALS
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getExternal_function_callAccess().getComponent_referenceParserRuleCall_0_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulecomponent_reference_in_ruleexternal_function_call2476);
+                    this_component_reference_0=rulecomponent_reference();
+                    _fsp--;
+
+
+                    		current.merge(this_component_reference_0);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+                    this_EQUALS_1=(Token)input.LT(1);
+                    match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleexternal_function_call2496); 
+
+                    		current.merge(this_EQUALS_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getExternal_function_callAccess().getEQUALSTerminalRuleCall_0_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            this_IDENT_2=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleexternal_function_call2518); 
+
+            		current.merge(this_IDENT_2);
+                
+             
+                createLeafNode(grammarAccess.getExternal_function_callAccess().getIDENTTerminalRuleCall_1(), null); 
+                
+            this_LPAR_3=(Token)input.LT(1);
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_ruleexternal_function_call2538); 
+
+            		current.merge(this_LPAR_3);
+                
+             
+                createLeafNode(grammarAccess.getExternal_function_callAccess().getLPARTerminalRuleCall_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1209:1: (this_expression_list_4= ruleexpression_list )?
+            int alt24=2;
+            int LA24_0 = input.LA(1);
+
+            if ( (LA24_0==RULE_IDENT||LA24_0==RULE_LPAR||LA24_0==RULE_STRING||(LA24_0>=RULE_PLUS && LA24_0<=RULE_MINUS_EW)||(LA24_0>=RULE_UNSIGNED_INTEGER && LA24_0<=RULE_LBRACK)||LA24_0==RULE_LBRACE||LA24_0==48||LA24_0==50||LA24_0==69||LA24_0==73||(LA24_0>=88 && LA24_0<=90)) ) {
+                alt24=1;
+            }
+            switch (alt24) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1210:5: this_expression_list_4= ruleexpression_list
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getExternal_function_callAccess().getExpression_listParserRuleCall_3(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_list_in_ruleexternal_function_call2566);
+                    this_expression_list_4=ruleexpression_list();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_list_4);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+            this_RPAR_5=(Token)input.LT(1);
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_ruleexternal_function_call2588); 
+
+            		current.merge(this_RPAR_5);
+                
+             
+                createLeafNode(grammarAccess.getExternal_function_callAccess().getRPARTerminalRuleCall_4(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleexternal_function_call
+
+
+    // $ANTLR start entryRuleElementList
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1235:1: entryRuleElementList returns [EObject current=null] : iv_ruleElementList= ruleElementList EOF ;
+    public final EObject entryRuleElementList() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleElementList = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1235:53: (iv_ruleElementList= ruleElementList EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1236:2: iv_ruleElementList= ruleElementList EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElementListRule(), currentNode); 
+            pushFollow(FOLLOW_ruleElementList_in_entryRuleElementList2631);
+            iv_ruleElementList=ruleElementList();
+            _fsp--;
+
+             current =iv_ruleElementList; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleElementList2641); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleElementList
+
+
+    // $ANTLR start ruleElementList
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1243:1: ruleElementList returns [EObject current=null] : ( ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) ) RULE_SEMICOLON )* ;
+    public final EObject ruleElementList() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_elements_0 = null;
+
+        EObject lv_annotations_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1248:6: ( ( ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) ) RULE_SEMICOLON )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1249:1: ( ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) ) RULE_SEMICOLON )*
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1249:1: ( ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) ) RULE_SEMICOLON )*
+            loop26:
+            do {
+                int alt26=2;
+                int LA26_0 = input.LA(1);
+
+                if ( (LA26_0==RULE_IDENT||(LA26_0>=43 && LA26_0<=47)||LA26_0==49||(LA26_0>=56 && LA26_0<=60)||(LA26_0>=62 && LA26_0<=68)||(LA26_0>=91 && LA26_0<=98)) ) {
+                    alt26=1;
+                }
+
+
+                switch (alt26) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1249:2: ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1249:2: ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) )
+            	    int alt25=2;
+            	    int LA25_0 = input.LA(1);
+
+            	    if ( (LA25_0==RULE_IDENT||(LA25_0>=43 && LA25_0<=47)||LA25_0==49||(LA25_0>=56 && LA25_0<=60)||(LA25_0>=62 && LA25_0<=68)||(LA25_0>=92 && LA25_0<=98)) ) {
+            	        alt25=1;
+            	    }
+            	    else if ( (LA25_0==91) ) {
+            	        alt25=2;
+            	    }
+            	    else {
+            	        NoViableAltException nvae =
+            	            new NoViableAltException("1249:2: ( (lv_elements_0= ruleClassElement ) | (lv_annotations_1= ruleannotation ) )", 25, 0, input);
+
+            	        throw nvae;
+            	    }
+            	    switch (alt25) {
+            	        case 1 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1249:3: (lv_elements_0= ruleClassElement )
+            	            {
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1249:3: (lv_elements_0= ruleClassElement )
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1252:6: lv_elements_0= ruleClassElement
+            	            {
+            	             
+            	            	        currentNode=createCompositeNode(grammarAccess.getElementListAccess().getElementsClassElementParserRuleCall_0_0_0(), currentNode); 
+            	            	    
+            	            pushFollow(FOLLOW_ruleClassElement_in_ruleElementList2701);
+            	            lv_elements_0=ruleClassElement();
+            	            _fsp--;
+
+
+            	            	        if (current==null) {
+            	            	            current = factory.create(grammarAccess.getElementListRule().getType().getClassifier());
+            	            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	            	        }
+            	            	        
+            	            	        try {
+            	            	       		add(current, "elements", lv_elements_0, "ClassElement", currentNode);
+            	            	        } catch (ValueConverterException vce) {
+            	            				handleValueConverterException(vce);
+            	            	        }
+            	            	        currentNode = currentNode.getParent();
+            	            	    
+
+            	            }
+
+
+            	            }
+            	            break;
+            	        case 2 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1271:6: (lv_annotations_1= ruleannotation )
+            	            {
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1271:6: (lv_annotations_1= ruleannotation )
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1274:6: lv_annotations_1= ruleannotation
+            	            {
+            	             
+            	            	        currentNode=createCompositeNode(grammarAccess.getElementListAccess().getAnnotationsAnnotationParserRuleCall_0_1_0(), currentNode); 
+            	            	    
+            	            pushFollow(FOLLOW_ruleannotation_in_ruleElementList2745);
+            	            lv_annotations_1=ruleannotation();
+            	            _fsp--;
+
+
+            	            	        if (current==null) {
+            	            	            current = factory.create(grammarAccess.getElementListRule().getType().getClassifier());
+            	            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	            	        }
+            	            	        
+            	            	        try {
+            	            	       		add(current, "annotations", lv_annotations_1, "annotation", currentNode);
+            	            	        } catch (ValueConverterException vce) {
+            	            				handleValueConverterException(vce);
+            	            	        }
+            	            	        currentNode = currentNode.getParent();
+            	            	    
+
+            	            }
+
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleElementList2759); 
+            	     
+            	        createLeafNode(grammarAccess.getElementListAccess().getSEMICOLONTerminalRuleCall_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop26;
+                }
+            } while (true);
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleElementList
+
+
+    // $ANTLR start entryRuleElementList2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1303:1: entryRuleElementList2 returns [EObject current=null] : iv_ruleElementList2= ruleElementList2 EOF ;
+    public final EObject entryRuleElementList2() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleElementList2 = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1303:54: (iv_ruleElementList2= ruleElementList2 EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1304:2: iv_ruleElementList2= ruleElementList2 EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElementList2Rule(), currentNode); 
+            pushFollow(FOLLOW_ruleElementList2_in_entryRuleElementList22792);
+            iv_ruleElementList2=ruleElementList2();
+            _fsp--;
+
+             current =iv_ruleElementList2; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleElementList22802); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleElementList2
+
+
+    // $ANTLR start ruleElementList2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1311:1: ruleElementList2 returns [EObject current=null] : ( ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* ) | ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* ) ) ;
+    public final EObject ruleElementList2() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_elements_2 = null;
+
+        EObject lv_annotations_3 = null;
+
+        EObject lv_elements_7 = null;
+
+        EObject lv_annotations_8 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1316:6: ( ( ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* ) | ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1317:1: ( ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* ) | ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1317:1: ( ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* ) | ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* ) )
+            int alt31=2;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==54) ) {
+                alt31=1;
+            }
+            else if ( (LA31_0==55) ) {
+                alt31=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("1317:1: ( ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* ) | ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* ) )", 31, 0, input);
+
+                throw nvae;
+            }
+            switch (alt31) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1317:2: ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1317:2: ( 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )* )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1317:3: 'public' () ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )*
+                    {
+                    match(input,54,FOLLOW_54_in_ruleElementList22837); 
+
+                            createLeafNode(grammarAccess.getElementList2Access().getPublicKeyword_0_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1321:1: ()
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1322:5: 
+                    {
+                     
+                            temp=factory.create(grammarAccess.getElementList2Access().getPublicElementListAction_0_1().getType().getClassifier());
+                            current = temp; 
+                            temp = null;
+                            CompositeNode newNode = createCompositeNode(grammarAccess.getElementList2Access().getPublicElementListAction_0_1(), currentNode.getParent());
+                        newNode.getChildren().add(currentNode);
+                        moveLookaheadInfo(currentNode, newNode);
+                        currentNode = newNode; 
+                            associateNodeWithAstElement(currentNode, current); 
+                        
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1332:2: ( ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON )*
+                    loop28:
+                    do {
+                        int alt28=2;
+                        int LA28_0 = input.LA(1);
+
+                        if ( (LA28_0==RULE_IDENT||(LA28_0>=43 && LA28_0<=47)||LA28_0==49||(LA28_0>=56 && LA28_0<=60)||(LA28_0>=62 && LA28_0<=68)||(LA28_0>=91 && LA28_0<=98)) ) {
+                            alt28=1;
+                        }
+
+
+                        switch (alt28) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1332:3: ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) ) RULE_SEMICOLON
+                    	    {
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1332:3: ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) )
+                    	    int alt27=2;
+                    	    int LA27_0 = input.LA(1);
+
+                    	    if ( (LA27_0==RULE_IDENT||(LA27_0>=43 && LA27_0<=47)||LA27_0==49||(LA27_0>=56 && LA27_0<=60)||(LA27_0>=62 && LA27_0<=68)||(LA27_0>=92 && LA27_0<=98)) ) {
+                    	        alt27=1;
+                    	    }
+                    	    else if ( (LA27_0==91) ) {
+                    	        alt27=2;
+                    	    }
+                    	    else {
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("1332:3: ( (lv_elements_2= ruleClassElement ) | (lv_annotations_3= ruleannotation ) )", 27, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt27) {
+                    	        case 1 :
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1332:4: (lv_elements_2= ruleClassElement )
+                    	            {
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1332:4: (lv_elements_2= ruleClassElement )
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1335:6: lv_elements_2= ruleClassElement
+                    	            {
+                    	             
+                    	            	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getElementsClassElementParserRuleCall_0_2_0_0_0(), currentNode); 
+                    	            	    
+                    	            pushFollow(FOLLOW_ruleClassElement_in_ruleElementList22882);
+                    	            lv_elements_2=ruleClassElement();
+                    	            _fsp--;
+
+
+                    	            	        if (current==null) {
+                    	            	            current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+                    	            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	            	        }
+                    	            	        
+                    	            	        try {
+                    	            	       		add(current, "elements", lv_elements_2, "ClassElement", currentNode);
+                    	            	        } catch (ValueConverterException vce) {
+                    	            				handleValueConverterException(vce);
+                    	            	        }
+                    	            	        currentNode = currentNode.getParent();
+                    	            	    
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1354:6: (lv_annotations_3= ruleannotation )
+                    	            {
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1354:6: (lv_annotations_3= ruleannotation )
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1357:6: lv_annotations_3= ruleannotation
+                    	            {
+                    	             
+                    	            	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getAnnotationsAnnotationParserRuleCall_0_2_0_1_0(), currentNode); 
+                    	            	    
+                    	            pushFollow(FOLLOW_ruleannotation_in_ruleElementList22926);
+                    	            lv_annotations_3=ruleannotation();
+                    	            _fsp--;
+
+
+                    	            	        if (current==null) {
+                    	            	            current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+                    	            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	            	        }
+                    	            	        
+                    	            	        try {
+                    	            	       		add(current, "annotations", lv_annotations_3, "annotation", currentNode);
+                    	            	        } catch (ValueConverterException vce) {
+                    	            				handleValueConverterException(vce);
+                    	            	        }
+                    	            	        currentNode = currentNode.getParent();
+                    	            	    
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleElementList22940); 
+                    	     
+                    	        createLeafNode(grammarAccess.getElementList2Access().getSEMICOLONTerminalRuleCall_0_2_1(), null); 
+                    	        
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop28;
+                        }
+                    } while (true);
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1380:6: ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1380:6: ( 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )* )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1380:7: 'protected' () ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )*
+                    {
+                    match(input,55,FOLLOW_55_in_ruleElementList22958); 
+
+                            createLeafNode(grammarAccess.getElementList2Access().getProtectedKeyword_1_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1384:1: ()
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1385:5: 
+                    {
+                     
+                            temp=factory.create(grammarAccess.getElementList2Access().getProtectesElementListAction_1_1().getType().getClassifier());
+                            current = temp; 
+                            temp = null;
+                            CompositeNode newNode = createCompositeNode(grammarAccess.getElementList2Access().getProtectesElementListAction_1_1(), currentNode.getParent());
+                        newNode.getChildren().add(currentNode);
+                        moveLookaheadInfo(currentNode, newNode);
+                        currentNode = newNode; 
+                            associateNodeWithAstElement(currentNode, current); 
+                        
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1395:2: ( ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON )*
+                    loop30:
+                    do {
+                        int alt30=2;
+                        int LA30_0 = input.LA(1);
+
+                        if ( (LA30_0==RULE_IDENT||(LA30_0>=43 && LA30_0<=47)||LA30_0==49||(LA30_0>=56 && LA30_0<=60)||(LA30_0>=62 && LA30_0<=68)||(LA30_0>=91 && LA30_0<=98)) ) {
+                            alt30=1;
+                        }
+
+
+                        switch (alt30) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1395:3: ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) ) RULE_SEMICOLON
+                    	    {
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1395:3: ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) )
+                    	    int alt29=2;
+                    	    int LA29_0 = input.LA(1);
+
+                    	    if ( (LA29_0==RULE_IDENT||(LA29_0>=43 && LA29_0<=47)||LA29_0==49||(LA29_0>=56 && LA29_0<=60)||(LA29_0>=62 && LA29_0<=68)||(LA29_0>=92 && LA29_0<=98)) ) {
+                    	        alt29=1;
+                    	    }
+                    	    else if ( (LA29_0==91) ) {
+                    	        alt29=2;
+                    	    }
+                    	    else {
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("1395:3: ( (lv_elements_7= ruleClassElement ) | (lv_annotations_8= ruleannotation ) )", 29, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt29) {
+                    	        case 1 :
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1395:4: (lv_elements_7= ruleClassElement )
+                    	            {
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1395:4: (lv_elements_7= ruleClassElement )
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1398:6: lv_elements_7= ruleClassElement
+                    	            {
+                    	             
+                    	            	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getElementsClassElementParserRuleCall_1_2_0_0_0(), currentNode); 
+                    	            	    
+                    	            pushFollow(FOLLOW_ruleClassElement_in_ruleElementList23003);
+                    	            lv_elements_7=ruleClassElement();
+                    	            _fsp--;
+
+
+                    	            	        if (current==null) {
+                    	            	            current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+                    	            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	            	        }
+                    	            	        
+                    	            	        try {
+                    	            	       		add(current, "elements", lv_elements_7, "ClassElement", currentNode);
+                    	            	        } catch (ValueConverterException vce) {
+                    	            				handleValueConverterException(vce);
+                    	            	        }
+                    	            	        currentNode = currentNode.getParent();
+                    	            	    
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1417:6: (lv_annotations_8= ruleannotation )
+                    	            {
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1417:6: (lv_annotations_8= ruleannotation )
+                    	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1420:6: lv_annotations_8= ruleannotation
+                    	            {
+                    	             
+                    	            	        currentNode=createCompositeNode(grammarAccess.getElementList2Access().getAnnotationsAnnotationParserRuleCall_1_2_0_1_0(), currentNode); 
+                    	            	    
+                    	            pushFollow(FOLLOW_ruleannotation_in_ruleElementList23047);
+                    	            lv_annotations_8=ruleannotation();
+                    	            _fsp--;
+
+
+                    	            	        if (current==null) {
+                    	            	            current = factory.create(grammarAccess.getElementList2Rule().getType().getClassifier());
+                    	            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	            	        }
+                    	            	        
+                    	            	        try {
+                    	            	       		add(current, "annotations", lv_annotations_8, "annotation", currentNode);
+                    	            	        } catch (ValueConverterException vce) {
+                    	            				handleValueConverterException(vce);
+                    	            	        }
+                    	            	        currentNode = currentNode.getParent();
+                    	            	    
+
+                    	            }
+
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleElementList23061); 
+                    	     
+                    	        createLeafNode(grammarAccess.getElementList2Access().getSEMICOLONTerminalRuleCall_1_2_1(), null); 
+                    	        
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop30;
+                        }
+                    } while (true);
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleElementList2
+
+
+    // $ANTLR start entryRuleClassElement
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1449:1: entryRuleClassElement returns [EObject current=null] : iv_ruleClassElement= ruleClassElement EOF ;
+    public final EObject entryRuleClassElement() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleClassElement = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1449:54: (iv_ruleClassElement= ruleClassElement EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1450:2: iv_ruleClassElement= ruleClassElement EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getClassElementRule(), currentNode); 
+            pushFollow(FOLLOW_ruleClassElement_in_entryRuleClassElement3096);
+            iv_ruleClassElement=ruleClassElement();
+            _fsp--;
+
+             current =iv_ruleClassElement; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleClassElement3106); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleClassElement
+
+
+    // $ANTLR start ruleClassElement
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1457:1: ruleClassElement returns [EObject current=null] : (this_import_clause_0= ruleimport_clause | this_extends_clause_1= ruleextends_clause | ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) ) ) ;
+    public final EObject ruleClassElement() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_import_clause_0 = null;
+
+        EObject this_extends_clause_1 = null;
+
+        EObject this_ClassDefinition_6 = null;
+
+        EObject this_component_clause_7 = null;
+
+        EObject this_ReplaceableElementClause_8 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1462:6: ( (this_import_clause_0= ruleimport_clause | this_extends_clause_1= ruleextends_clause | ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1463:1: (this_import_clause_0= ruleimport_clause | this_extends_clause_1= ruleextends_clause | ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1463:1: (this_import_clause_0= ruleimport_clause | this_extends_clause_1= ruleextends_clause | ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) ) )
+            int alt38=3;
+            switch ( input.LA(1) ) {
+            case 60:
+                {
+                alt38=1;
+                }
+                break;
+            case 47:
+                {
+                alt38=2;
+                }
+                break;
+            case RULE_IDENT:
+            case 43:
+            case 44:
+            case 45:
+            case 46:
+            case 49:
+            case 56:
+            case 57:
+            case 58:
+            case 59:
+            case 62:
+            case 63:
+            case 64:
+            case 65:
+            case 66:
+            case 67:
+            case 68:
+            case 92:
+            case 93:
+            case 94:
+            case 95:
+            case 96:
+            case 97:
+            case 98:
+                {
+                alt38=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("1463:1: (this_import_clause_0= ruleimport_clause | this_extends_clause_1= ruleextends_clause | ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) ) )", 38, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt38) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1464:5: this_import_clause_0= ruleimport_clause
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getImport_clauseParserRuleCall_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleimport_clause_in_ruleClassElement3153);
+                    this_import_clause_0=ruleimport_clause();
+                    _fsp--;
+
+                     
+                            current = this_import_clause_0; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1474:5: this_extends_clause_1= ruleextends_clause
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getExtends_clauseParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleextends_clause_in_ruleClassElement3180);
+                    this_extends_clause_1=ruleextends_clause();
+                    _fsp--;
+
+                     
+                            current = this_extends_clause_1; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1483:6: ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1483:6: ( ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause ) )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1483:7: ( 'redeclare' )? ( 'final' )? ( 'inner' )? ( 'outer' )? ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1483:7: ( 'redeclare' )?
+                    int alt32=2;
+                    int LA32_0 = input.LA(1);
+
+                    if ( (LA32_0==56) ) {
+                        alt32=1;
+                    }
+                    switch (alt32) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1483:8: 'redeclare'
+                            {
+                            match(input,56,FOLLOW_56_in_ruleClassElement3196); 
+
+                                    createLeafNode(grammarAccess.getClassElementAccess().getRedeclareKeyword_2_0(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1487:3: ( 'final' )?
+                    int alt33=2;
+                    int LA33_0 = input.LA(1);
+
+                    if ( (LA33_0==43) ) {
+                        alt33=1;
+                    }
+                    switch (alt33) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1487:4: 'final'
+                            {
+                            match(input,43,FOLLOW_43_in_ruleClassElement3208); 
+
+                                    createLeafNode(grammarAccess.getClassElementAccess().getFinalKeyword_2_1(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1491:3: ( 'inner' )?
+                    int alt34=2;
+                    int LA34_0 = input.LA(1);
+
+                    if ( (LA34_0==57) ) {
+                        alt34=1;
+                    }
+                    switch (alt34) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1491:4: 'inner'
+                            {
+                            match(input,57,FOLLOW_57_in_ruleClassElement3220); 
+
+                                    createLeafNode(grammarAccess.getClassElementAccess().getInnerKeyword_2_2(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1495:3: ( 'outer' )?
+                    int alt35=2;
+                    int LA35_0 = input.LA(1);
+
+                    if ( (LA35_0==58) ) {
+                        alt35=1;
+                    }
+                    switch (alt35) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1495:4: 'outer'
+                            {
+                            match(input,58,FOLLOW_58_in_ruleClassElement3232); 
+
+                                    createLeafNode(grammarAccess.getClassElementAccess().getOuterKeyword_2_3(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1499:3: ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause )
+                    int alt37=2;
+                    int LA37_0 = input.LA(1);
+
+                    if ( (LA37_0==RULE_IDENT||(LA37_0>=44 && LA37_0<=46)||LA37_0==49||(LA37_0>=62 && LA37_0<=68)||(LA37_0>=92 && LA37_0<=98)) ) {
+                        alt37=1;
+                    }
+                    else if ( (LA37_0==59) ) {
+                        alt37=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("1499:3: ( (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause ) | this_ReplaceableElementClause_8= ruleReplaceableElementClause )", 37, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt37) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1499:4: (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause )
+                            {
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1499:4: (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause )
+                            int alt36=2;
+                            int LA36_0 = input.LA(1);
+
+                            if ( ((LA36_0>=44 && LA36_0<=46)||LA36_0==49||(LA36_0>=92 && LA36_0<=98)) ) {
+                                alt36=1;
+                            }
+                            else if ( (LA36_0==RULE_IDENT||(LA36_0>=62 && LA36_0<=68)) ) {
+                                alt36=2;
+                            }
+                            else {
+                                NoViableAltException nvae =
+                                    new NoViableAltException("1499:4: (this_ClassDefinition_6= ruleClassDefinition | this_component_clause_7= rulecomponent_clause )", 36, 0, input);
+
+                                throw nvae;
+                            }
+                            switch (alt36) {
+                                case 1 :
+                                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1500:5: this_ClassDefinition_6= ruleClassDefinition
+                                    {
+                                     
+                                            currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getClassDefinitionParserRuleCall_2_4_0_0(), currentNode); 
+                                        
+                                    pushFollow(FOLLOW_ruleClassDefinition_in_ruleClassElement3258);
+                                    this_ClassDefinition_6=ruleClassDefinition();
+                                    _fsp--;
+
+                                     
+                                            current = this_ClassDefinition_6; 
+                                            currentNode = currentNode.getParent();
+                                        
+
+                                    }
+                                    break;
+                                case 2 :
+                                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1510:5: this_component_clause_7= rulecomponent_clause
+                                    {
+                                     
+                                            currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getComponent_clauseParserRuleCall_2_4_0_1(), currentNode); 
+                                        
+                                    pushFollow(FOLLOW_rulecomponent_clause_in_ruleClassElement3285);
+                                    this_component_clause_7=rulecomponent_clause();
+                                    _fsp--;
+
+                                     
+                                            current = this_component_clause_7; 
+                                            currentNode = currentNode.getParent();
+                                        
+
+                                    }
+                                    break;
+
+                            }
+
+
+                            }
+                            break;
+                        case 2 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1520:5: this_ReplaceableElementClause_8= ruleReplaceableElementClause
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getClassElementAccess().getReplaceableElementClauseParserRuleCall_2_4_1(), currentNode); 
+                                
+                            pushFollow(FOLLOW_ruleReplaceableElementClause_in_ruleClassElement3313);
+                            this_ReplaceableElementClause_8=ruleReplaceableElementClause();
+                            _fsp--;
+
+                             
+                                    current = this_ReplaceableElementClause_8; 
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleClassElement
+
+
+    // $ANTLR start entryRuleReplaceableElementClause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1535:1: entryRuleReplaceableElementClause returns [EObject current=null] : iv_ruleReplaceableElementClause= ruleReplaceableElementClause EOF ;
+    public final EObject entryRuleReplaceableElementClause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleReplaceableElementClause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1535:66: (iv_ruleReplaceableElementClause= ruleReplaceableElementClause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1536:2: iv_ruleReplaceableElementClause= ruleReplaceableElementClause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getReplaceableElementClauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleReplaceableElementClause_in_entryRuleReplaceableElementClause3347);
+            iv_ruleReplaceableElementClause=ruleReplaceableElementClause();
+            _fsp--;
+
+             current =iv_ruleReplaceableElementClause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleReplaceableElementClause3357); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleReplaceableElementClause
+
+
+    // $ANTLR start ruleReplaceableElementClause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1543:1: ruleReplaceableElementClause returns [EObject current=null] : ( 'replaceable' (lv_entity_1= ( ruleClassDefinition | rulecomponent_clause ) ) (lv_constrain_2= ruleconstraining_clause )? ) ;
+    public final EObject ruleReplaceableElementClause() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_entity_1=null;
+        EObject lv_constrain_2 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1548:6: ( ( 'replaceable' (lv_entity_1= ( ruleClassDefinition | rulecomponent_clause ) ) (lv_constrain_2= ruleconstraining_clause )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1549:1: ( 'replaceable' (lv_entity_1= ( ruleClassDefinition | rulecomponent_clause ) ) (lv_constrain_2= ruleconstraining_clause )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1549:1: ( 'replaceable' (lv_entity_1= ( ruleClassDefinition | rulecomponent_clause ) ) (lv_constrain_2= ruleconstraining_clause )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1549:2: 'replaceable' (lv_entity_1= ( ruleClassDefinition | rulecomponent_clause ) ) (lv_constrain_2= ruleconstraining_clause )?
+            {
+            match(input,59,FOLLOW_59_in_ruleReplaceableElementClause3391); 
+
+                    createLeafNode(grammarAccess.getReplaceableElementClauseAccess().getReplaceableKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1553:1: (lv_entity_1= ( ruleClassDefinition | rulecomponent_clause ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1555:6: lv_entity_1= ( ruleClassDefinition | rulecomponent_clause )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1555:18: ( ruleClassDefinition | rulecomponent_clause )
+            int alt39=2;
+            int LA39_0 = input.LA(1);
+
+            if ( ((LA39_0>=44 && LA39_0<=46)||LA39_0==49||(LA39_0>=92 && LA39_0<=98)) ) {
+                alt39=1;
+            }
+            else if ( (LA39_0==RULE_IDENT||(LA39_0>=62 && LA39_0<=68)) ) {
+                alt39=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("1555:18: ( ruleClassDefinition | rulecomponent_clause )", 39, 0, input);
+
+                throw nvae;
+            }
+            switch (alt39) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1555:20: ruleClassDefinition
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getReplaceableElementClauseAccess().getEntityClassDefinitionParserRuleCall_1_0_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleClassDefinition_in_ruleReplaceableElementClause3417);
+                    ruleClassDefinition();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1562:7: rulecomponent_clause
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getReplaceableElementClauseAccess().getEntityComponent_clauseParserRuleCall_1_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulecomponent_clause_in_ruleReplaceableElementClause3431);
+                    rulecomponent_clause();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getReplaceableElementClauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "entity", lv_entity_1, null, lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1583:2: (lv_constrain_2= ruleconstraining_clause )?
+            int alt40=2;
+            int LA40_0 = input.LA(1);
+
+            if ( (LA40_0==47||LA40_0==61) ) {
+                alt40=1;
+            }
+            switch (alt40) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1586:6: lv_constrain_2= ruleconstraining_clause
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getReplaceableElementClauseAccess().getConstrainConstraining_clauseParserRuleCall_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleconstraining_clause_in_ruleReplaceableElementClause3474);
+                    lv_constrain_2=ruleconstraining_clause();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getReplaceableElementClauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "constrain", lv_constrain_2, "constraining_clause", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleReplaceableElementClause
+
+
+    // $ANTLR start entryRuleimport_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1611:1: entryRuleimport_clause returns [EObject current=null] : iv_ruleimport_clause= ruleimport_clause EOF ;
+    public final EObject entryRuleimport_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleimport_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1611:55: (iv_ruleimport_clause= ruleimport_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1612:2: iv_ruleimport_clause= ruleimport_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getImport_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleimport_clause_in_entryRuleimport_clause3512);
+            iv_ruleimport_clause=ruleimport_clause();
+            _fsp--;
+
+             current =iv_ruleimport_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleimport_clause3522); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleimport_clause
+
+
+    // $ANTLR start ruleimport_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1619:1: ruleimport_clause returns [EObject current=null] : ( 'import' ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) ) (lv_comment_5= rulecomment ) ) ;
+    public final EObject ruleimport_clause() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_asName_1=null;
+        AntlrDatatypeRuleToken lv_name_3 = null;
+
+        AntlrDatatypeRuleToken lv_name_4 = null;
+
+        EObject lv_comment_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1624:6: ( ( 'import' ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) ) (lv_comment_5= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1625:1: ( 'import' ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) ) (lv_comment_5= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1625:1: ( 'import' ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) ) (lv_comment_5= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1625:2: 'import' ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) ) (lv_comment_5= rulecomment )
+            {
+            match(input,60,FOLLOW_60_in_ruleimport_clause3556); 
+
+                    createLeafNode(grammarAccess.getImport_clauseAccess().getImportKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1629:1: ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) )
+            int alt41=2;
+            int LA41_0 = input.LA(1);
+
+            if ( (LA41_0==RULE_IDENT) ) {
+                int LA41_1 = input.LA(2);
+
+                if ( (LA41_1==EOF||LA41_1==RULE_SEMICOLON||LA41_1==RULE_STRING||LA41_1==RULE_DOT||LA41_1==RULE_STAR_EW||LA41_1==91) ) {
+                    alt41=2;
+                }
+                else if ( (LA41_1==RULE_EQUALS) ) {
+                    alt41=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("1629:1: ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) )", 41, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("1629:1: ( ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) ) | (lv_name_4= rulename_path_star ) )", 41, 0, input);
+
+                throw nvae;
+            }
+            switch (alt41) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1629:2: ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1629:2: ( (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path ) )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1629:3: (lv_asName_1= RULE_IDENT ) RULE_EQUALS (lv_name_3= rulename_path )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1629:3: (lv_asName_1= RULE_IDENT )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1631:6: lv_asName_1= RULE_IDENT
+                    {
+                    lv_asName_1=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleimport_clause3580); 
+
+                    		createLeafNode(grammarAccess.getImport_clauseAccess().getAsNameIDENTTerminalRuleCall_1_0_0_0(), "asName"); 
+                    	
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode, current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "asName", lv_asName_1, "IDENT", lastConsumedNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	    
+
+                    }
+
+                    match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleimport_clause3597); 
+                     
+                        createLeafNode(grammarAccess.getImport_clauseAccess().getEQUALSTerminalRuleCall_1_0_1(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1653:1: (lv_name_3= rulename_path )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1656:6: lv_name_3= rulename_path
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getImport_clauseAccess().getNameName_pathParserRuleCall_1_0_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulename_path_in_ruleimport_clause3630);
+                    lv_name_3=rulename_path();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "name", lv_name_3, "name_path", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1675:6: (lv_name_4= rulename_path_star )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1675:6: (lv_name_4= rulename_path_star )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1678:6: lv_name_4= rulename_path_star
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getImport_clauseAccess().getNameName_path_starParserRuleCall_1_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulename_path_star_in_ruleimport_clause3675);
+                    lv_name_4=rulename_path_star();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "name", lv_name_4, "name_path_star", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1696:3: (lv_comment_5= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1699:6: lv_comment_5= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getImport_clauseAccess().getCommentCommentParserRuleCall_2_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleimport_clause3714);
+            lv_comment_5=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getImport_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_5, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleimport_clause
+
+
+    // $ANTLR start entryRuleextends_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1724:1: entryRuleextends_clause returns [EObject current=null] : iv_ruleextends_clause= ruleextends_clause EOF ;
+    public final EObject entryRuleextends_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleextends_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1724:56: (iv_ruleextends_clause= ruleextends_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1725:2: iv_ruleextends_clause= ruleextends_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getExtends_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleextends_clause_in_entryRuleextends_clause3751);
+            iv_ruleextends_clause=ruleextends_clause();
+            _fsp--;
+
+             current =iv_ruleextends_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleextends_clause3761); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleextends_clause
+
+
+    // $ANTLR start ruleextends_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1732:1: ruleextends_clause returns [EObject current=null] : ( 'extends' (lv_baseClass_1= rulename_path ) (lv_modification_2= ruleclass_modification )? (lv_annotation_3= ruleannotation )? ) ;
+    public final EObject ruleextends_clause() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_baseClass_1 = null;
+
+        EObject lv_modification_2 = null;
+
+        EObject lv_annotation_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1737:6: ( ( 'extends' (lv_baseClass_1= rulename_path ) (lv_modification_2= ruleclass_modification )? (lv_annotation_3= ruleannotation )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1738:1: ( 'extends' (lv_baseClass_1= rulename_path ) (lv_modification_2= ruleclass_modification )? (lv_annotation_3= ruleannotation )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1738:1: ( 'extends' (lv_baseClass_1= rulename_path ) (lv_modification_2= ruleclass_modification )? (lv_annotation_3= ruleannotation )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1738:2: 'extends' (lv_baseClass_1= rulename_path ) (lv_modification_2= ruleclass_modification )? (lv_annotation_3= ruleannotation )?
+            {
+            match(input,47,FOLLOW_47_in_ruleextends_clause3795); 
+
+                    createLeafNode(grammarAccess.getExtends_clauseAccess().getExtendsKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1742:1: (lv_baseClass_1= rulename_path )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1745:6: lv_baseClass_1= rulename_path
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getExtends_clauseAccess().getBaseClassName_pathParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulename_path_in_ruleextends_clause3829);
+            lv_baseClass_1=rulename_path();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getExtends_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "baseClass", lv_baseClass_1, "name_path", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1763:2: (lv_modification_2= ruleclass_modification )?
+            int alt42=2;
+            int LA42_0 = input.LA(1);
+
+            if ( (LA42_0==RULE_LPAR) ) {
+                alt42=1;
+            }
+            switch (alt42) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1766:6: lv_modification_2= ruleclass_modification
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getExtends_clauseAccess().getModificationClass_modificationParserRuleCall_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleclass_modification_in_ruleextends_clause3867);
+                    lv_modification_2=ruleclass_modification();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getExtends_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "modification", lv_modification_2, "class_modification", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1784:3: (lv_annotation_3= ruleannotation )?
+            int alt43=2;
+            int LA43_0 = input.LA(1);
+
+            if ( (LA43_0==91) ) {
+                alt43=1;
+            }
+            switch (alt43) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1787:6: lv_annotation_3= ruleannotation
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getExtends_clauseAccess().getAnnotationAnnotationParserRuleCall_3_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleannotation_in_ruleextends_clause3906);
+                    lv_annotation_3=ruleannotation();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getExtends_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "annotation", lv_annotation_3, "annotation", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleextends_clause
+
+
+    // $ANTLR start entryRuleconstraining_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1812:1: entryRuleconstraining_clause returns [EObject current=null] : iv_ruleconstraining_clause= ruleconstraining_clause EOF ;
+    public final EObject entryRuleconstraining_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleconstraining_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1812:61: (iv_ruleconstraining_clause= ruleconstraining_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1813:2: iv_ruleconstraining_clause= ruleconstraining_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConstraining_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleconstraining_clause_in_entryRuleconstraining_clause3944);
+            iv_ruleconstraining_clause=ruleconstraining_clause();
+            _fsp--;
+
+             current =iv_ruleconstraining_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleconstraining_clause3954); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleconstraining_clause
+
+
+    // $ANTLR start ruleconstraining_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1820:1: ruleconstraining_clause returns [EObject current=null] : ( ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) ) (lv_comment_6= rulecomment ) ) ;
+    public final EObject ruleconstraining_clause() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_name_1 = null;
+
+        EObject lv_modification_2 = null;
+
+        AntlrDatatypeRuleToken lv_name_4 = null;
+
+        EObject lv_modification_5 = null;
+
+        EObject lv_comment_6 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1825:6: ( ( ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) ) (lv_comment_6= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:1: ( ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) ) (lv_comment_6= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:1: ( ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) ) (lv_comment_6= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:2: ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) ) (lv_comment_6= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:2: ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) )
+            int alt46=2;
+            int LA46_0 = input.LA(1);
+
+            if ( (LA46_0==47) ) {
+                alt46=1;
+            }
+            else if ( (LA46_0==61) ) {
+                alt46=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("1826:2: ( ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? ) | ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? ) )", 46, 0, input);
+
+                throw nvae;
+            }
+            switch (alt46) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:3: ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:3: ( 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1826:4: 'extends' (lv_name_1= rulename_path ) (lv_modification_2= ruleclass_modification )?
+                    {
+                    match(input,47,FOLLOW_47_in_ruleconstraining_clause3990); 
+
+                            createLeafNode(grammarAccess.getConstraining_clauseAccess().getExtendsKeyword_0_0_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1830:1: (lv_name_1= rulename_path )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1833:6: lv_name_1= rulename_path
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getNameName_pathParserRuleCall_0_0_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulename_path_in_ruleconstraining_clause4024);
+                    lv_name_1=rulename_path();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "name", lv_name_1, "name_path", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1851:2: (lv_modification_2= ruleclass_modification )?
+                    int alt44=2;
+                    int LA44_0 = input.LA(1);
+
+                    if ( (LA44_0==RULE_LPAR) ) {
+                        alt44=1;
+                    }
+                    switch (alt44) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1854:6: lv_modification_2= ruleclass_modification
+                            {
+                             
+                            	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getModificationClass_modificationParserRuleCall_0_0_2_0(), currentNode); 
+                            	    
+                            pushFollow(FOLLOW_ruleclass_modification_in_ruleconstraining_clause4062);
+                            lv_modification_2=ruleclass_modification();
+                            _fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+                            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                            	        }
+                            	        
+                            	        try {
+                            	       		set(current, "modification", lv_modification_2, "class_modification", currentNode);
+                            	        } catch (ValueConverterException vce) {
+                            				handleValueConverterException(vce);
+                            	        }
+                            	        currentNode = currentNode.getParent();
+                            	    
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1873:6: ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1873:6: ( 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1873:7: 'constrainedby' (lv_name_4= rulename_path ) (lv_modification_5= ruleclass_modification )?
+                    {
+                    match(input,61,FOLLOW_61_in_ruleconstraining_clause4084); 
+
+                            createLeafNode(grammarAccess.getConstraining_clauseAccess().getConstrainedbyKeyword_0_1_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1877:1: (lv_name_4= rulename_path )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1880:6: lv_name_4= rulename_path
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getNameName_pathParserRuleCall_0_1_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulename_path_in_ruleconstraining_clause4118);
+                    lv_name_4=rulename_path();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "name", lv_name_4, "name_path", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1898:2: (lv_modification_5= ruleclass_modification )?
+                    int alt45=2;
+                    int LA45_0 = input.LA(1);
+
+                    if ( (LA45_0==RULE_LPAR) ) {
+                        alt45=1;
+                    }
+                    switch (alt45) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1901:6: lv_modification_5= ruleclass_modification
+                            {
+                             
+                            	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getModificationClass_modificationParserRuleCall_0_1_2_0(), currentNode); 
+                            	    
+                            pushFollow(FOLLOW_ruleclass_modification_in_ruleconstraining_clause4156);
+                            lv_modification_5=ruleclass_modification();
+                            _fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+                            	            associateNodeWithAstElement(currentNode.getParent(), current);
+                            	        }
+                            	        
+                            	        try {
+                            	       		set(current, "modification", lv_modification_5, "class_modification", currentNode);
+                            	        } catch (ValueConverterException vce) {
+                            				handleValueConverterException(vce);
+                            	        }
+                            	        currentNode = currentNode.getParent();
+                            	    
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1919:5: (lv_comment_6= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1922:6: lv_comment_6= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getConstraining_clauseAccess().getCommentCommentParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleconstraining_clause4197);
+            lv_comment_6=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getConstraining_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_6, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleconstraining_clause
+
+
+    // $ANTLR start entryRulecomponent_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1947:1: entryRulecomponent_clause returns [EObject current=null] : iv_rulecomponent_clause= rulecomponent_clause EOF ;
+    public final EObject entryRulecomponent_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulecomponent_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1947:58: (iv_rulecomponent_clause= rulecomponent_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1948:2: iv_rulecomponent_clause= rulecomponent_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getComponent_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_rulecomponent_clause_in_entryRulecomponent_clause4234);
+            iv_rulecomponent_clause=rulecomponent_clause();
+            _fsp--;
+
+             current =iv_rulecomponent_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulecomponent_clause4244); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulecomponent_clause
+
+
+    // $ANTLR start rulecomponent_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1955:1: rulecomponent_clause returns [EObject current=null] : ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) (lv_declarations_2= rulecomponent_declaration ) ( RULE_COMMA (lv_declarations_4= rulecomponent_declaration ) )* ) ;
+    public final EObject rulecomponent_clause() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_typePrefix_0 = null;
+
+        EObject lv_typeSpecifier_1 = null;
+
+        EObject lv_declarations_2 = null;
+
+        EObject lv_declarations_4 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1960:6: ( ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) (lv_declarations_2= rulecomponent_declaration ) ( RULE_COMMA (lv_declarations_4= rulecomponent_declaration ) )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1961:1: ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) (lv_declarations_2= rulecomponent_declaration ) ( RULE_COMMA (lv_declarations_4= rulecomponent_declaration ) )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1961:1: ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) (lv_declarations_2= rulecomponent_declaration ) ( RULE_COMMA (lv_declarations_4= rulecomponent_declaration ) )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1961:2: (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) (lv_declarations_2= rulecomponent_declaration ) ( RULE_COMMA (lv_declarations_4= rulecomponent_declaration ) )*
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1961:2: (lv_typePrefix_0= ruletype_prefix )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1964:6: lv_typePrefix_0= ruletype_prefix
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getTypePrefixType_prefixParserRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruletype_prefix_in_rulecomponent_clause4303);
+            lv_typePrefix_0=ruletype_prefix();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "typePrefix", lv_typePrefix_0, "type_prefix", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1982:2: (lv_typeSpecifier_1= ruletype_specifier )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:1985:6: lv_typeSpecifier_1= ruletype_specifier
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getTypeSpecifierType_specifierParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruletype_specifier_in_rulecomponent_clause4341);
+            lv_typeSpecifier_1=ruletype_specifier();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "typeSpecifier", lv_typeSpecifier_1, "type_specifier", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2003:2: (lv_declarations_2= rulecomponent_declaration )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2006:6: lv_declarations_2= rulecomponent_declaration
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getDeclarationsComponent_declarationParserRuleCall_2_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomponent_declaration_in_rulecomponent_clause4379);
+            lv_declarations_2=rulecomponent_declaration();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		add(current, "declarations", lv_declarations_2, "component_declaration", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2024:2: ( RULE_COMMA (lv_declarations_4= rulecomponent_declaration ) )*
+            loop47:
+            do {
+                int alt47=2;
+                int LA47_0 = input.LA(1);
+
+                if ( (LA47_0==RULE_COMMA) ) {
+                    alt47=1;
+                }
+
+
+                switch (alt47) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2024:3: RULE_COMMA (lv_declarations_4= rulecomponent_declaration )
+            	    {
+            	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulecomponent_clause4393); 
+            	     
+            	        createLeafNode(grammarAccess.getComponent_clauseAccess().getCOMMATerminalRuleCall_3_0(), null); 
+            	        
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2028:1: (lv_declarations_4= rulecomponent_declaration )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2031:6: lv_declarations_4= rulecomponent_declaration
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getComponent_clauseAccess().getDeclarationsComponent_declarationParserRuleCall_3_1_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulecomponent_declaration_in_rulecomponent_clause4426);
+            	    lv_declarations_4=rulecomponent_declaration();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getComponent_clauseRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "declarations", lv_declarations_4, "component_declaration", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop47;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulecomponent_clause
+
+
+    // $ANTLR start entryRuletype_prefix
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2056:1: entryRuletype_prefix returns [String current=null] : iv_ruletype_prefix= ruletype_prefix EOF ;
+    public final String entryRuletype_prefix() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruletype_prefix = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2056:52: (iv_ruletype_prefix= ruletype_prefix EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2057:2: iv_ruletype_prefix= ruletype_prefix EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getType_prefixRule(), currentNode); 
+            pushFollow(FOLLOW_ruletype_prefix_in_entryRuletype_prefix4466);
+            iv_ruletype_prefix=ruletype_prefix();
+            _fsp--;
+
+             current =iv_ruletype_prefix.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuletype_prefix4477); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuletype_prefix
+
+
+    // $ANTLR start ruletype_prefix
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2064:1: ruletype_prefix returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= 'flow' | kw= 'stream' )? (kw= 'discrete' | kw= 'parameter' | kw= 'constant' )? (kw= 'input' | kw= 'output' )? ) ;
+    public final AntlrDatatypeRuleToken ruletype_prefix() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2070:6: ( ( (kw= 'flow' | kw= 'stream' )? (kw= 'discrete' | kw= 'parameter' | kw= 'constant' )? (kw= 'input' | kw= 'output' )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2071:1: ( (kw= 'flow' | kw= 'stream' )? (kw= 'discrete' | kw= 'parameter' | kw= 'constant' )? (kw= 'input' | kw= 'output' )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2071:1: ( (kw= 'flow' | kw= 'stream' )? (kw= 'discrete' | kw= 'parameter' | kw= 'constant' )? (kw= 'input' | kw= 'output' )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2071:2: (kw= 'flow' | kw= 'stream' )? (kw= 'discrete' | kw= 'parameter' | kw= 'constant' )? (kw= 'input' | kw= 'output' )?
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2071:2: (kw= 'flow' | kw= 'stream' )?
+            int alt48=3;
+            int LA48_0 = input.LA(1);
+
+            if ( (LA48_0==62) ) {
+                alt48=1;
+            }
+            else if ( (LA48_0==63) ) {
+                alt48=2;
+            }
+            switch (alt48) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2072:2: kw= 'flow'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,62,FOLLOW_62_in_ruletype_prefix4516); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getFlowKeyword_0_0(), null); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2079:2: kw= 'stream'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,63,FOLLOW_63_in_ruletype_prefix4535); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getStreamKeyword_0_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2084:3: (kw= 'discrete' | kw= 'parameter' | kw= 'constant' )?
+            int alt49=4;
+            switch ( input.LA(1) ) {
+                case 64:
+                    {
+                    alt49=1;
+                    }
+                    break;
+                case 65:
+                    {
+                    alt49=2;
+                    }
+                    break;
+                case 66:
+                    {
+                    alt49=3;
+                    }
+                    break;
+            }
+
+            switch (alt49) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2085:2: kw= 'discrete'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,64,FOLLOW_64_in_ruletype_prefix4551); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getDiscreteKeyword_1_0(), null); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2092:2: kw= 'parameter'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,65,FOLLOW_65_in_ruletype_prefix4570); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getParameterKeyword_1_1(), null); 
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2099:2: kw= 'constant'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,66,FOLLOW_66_in_ruletype_prefix4589); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getConstantKeyword_1_2(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2104:3: (kw= 'input' | kw= 'output' )?
+            int alt50=3;
+            int LA50_0 = input.LA(1);
+
+            if ( (LA50_0==67) ) {
+                alt50=1;
+            }
+            else if ( (LA50_0==68) ) {
+                alt50=2;
+            }
+            switch (alt50) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2105:2: kw= 'input'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,67,FOLLOW_67_in_ruletype_prefix4605); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getInputKeyword_2_0(), null); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2112:2: kw= 'output'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,68,FOLLOW_68_in_ruletype_prefix4624); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getType_prefixAccess().getOutputKeyword_2_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruletype_prefix
+
+
+    // $ANTLR start entryRuletype_specifier
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2125:1: entryRuletype_specifier returns [EObject current=null] : iv_ruletype_specifier= ruletype_specifier EOF ;
+    public final EObject entryRuletype_specifier() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruletype_specifier = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2125:56: (iv_ruletype_specifier= ruletype_specifier EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2126:2: iv_ruletype_specifier= ruletype_specifier EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getType_specifierRule(), currentNode); 
+            pushFollow(FOLLOW_ruletype_specifier_in_entryRuletype_specifier4664);
+            iv_ruletype_specifier=ruletype_specifier();
+            _fsp--;
+
+             current =iv_ruletype_specifier; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuletype_specifier4674); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuletype_specifier
+
+
+    // $ANTLR start ruletype_specifier
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2133:1: ruletype_specifier returns [EObject current=null] : ( (lv_name_0= rulename_path ) (lv_subscripts_1= rulearray_subscripts )? ) ;
+    public final EObject ruletype_specifier() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_name_0 = null;
+
+        AntlrDatatypeRuleToken lv_subscripts_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2138:6: ( ( (lv_name_0= rulename_path ) (lv_subscripts_1= rulearray_subscripts )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2139:1: ( (lv_name_0= rulename_path ) (lv_subscripts_1= rulearray_subscripts )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2139:1: ( (lv_name_0= rulename_path ) (lv_subscripts_1= rulearray_subscripts )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2139:2: (lv_name_0= rulename_path ) (lv_subscripts_1= rulearray_subscripts )?
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2139:2: (lv_name_0= rulename_path )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2142:6: lv_name_0= rulename_path
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getType_specifierAccess().getNameName_pathParserRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulename_path_in_ruletype_specifier4733);
+            lv_name_0=rulename_path();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getType_specifierRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "name", lv_name_0, "name_path", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2160:2: (lv_subscripts_1= rulearray_subscripts )?
+            int alt51=2;
+            int LA51_0 = input.LA(1);
+
+            if ( (LA51_0==RULE_LBRACK) ) {
+                alt51=1;
+            }
+            switch (alt51) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2163:6: lv_subscripts_1= rulearray_subscripts
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getType_specifierAccess().getSubscriptsArray_subscriptsParserRuleCall_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulearray_subscripts_in_ruletype_specifier4771);
+                    lv_subscripts_1=rulearray_subscripts();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getType_specifierRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "subscripts", lv_subscripts_1, "array_subscripts", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruletype_specifier
+
+
+    // $ANTLR start entryRulecomponent_declaration
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2188:1: entryRulecomponent_declaration returns [EObject current=null] : iv_rulecomponent_declaration= rulecomponent_declaration EOF ;
+    public final EObject entryRulecomponent_declaration() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulecomponent_declaration = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2188:63: (iv_rulecomponent_declaration= rulecomponent_declaration EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2189:2: iv_rulecomponent_declaration= rulecomponent_declaration EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getComponent_declarationRule(), currentNode); 
+            pushFollow(FOLLOW_rulecomponent_declaration_in_entryRulecomponent_declaration4809);
+            iv_rulecomponent_declaration=rulecomponent_declaration();
+            _fsp--;
+
+             current =iv_rulecomponent_declaration; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulecomponent_declaration4819); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulecomponent_declaration
+
+
+    // $ANTLR start rulecomponent_declaration
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2196:1: rulecomponent_declaration returns [EObject current=null] : ( RULE_IDENT (lv_subscripts_1= rulearray_subscripts )? (lv_modification_2= rulemodification )? ( 'if' (lv_condition_4= ruleexpression ) )? (lv_comment_5= rulecomment ) ) ;
+    public final EObject rulecomponent_declaration() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_subscripts_1 = null;
+
+        EObject lv_modification_2 = null;
+
+        AntlrDatatypeRuleToken lv_condition_4 = null;
+
+        EObject lv_comment_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2201:6: ( ( RULE_IDENT (lv_subscripts_1= rulearray_subscripts )? (lv_modification_2= rulemodification )? ( 'if' (lv_condition_4= ruleexpression ) )? (lv_comment_5= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2202:1: ( RULE_IDENT (lv_subscripts_1= rulearray_subscripts )? (lv_modification_2= rulemodification )? ( 'if' (lv_condition_4= ruleexpression ) )? (lv_comment_5= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2202:1: ( RULE_IDENT (lv_subscripts_1= rulearray_subscripts )? (lv_modification_2= rulemodification )? ( 'if' (lv_condition_4= ruleexpression ) )? (lv_comment_5= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2202:2: RULE_IDENT (lv_subscripts_1= rulearray_subscripts )? (lv_modification_2= rulemodification )? ( 'if' (lv_condition_4= ruleexpression ) )? (lv_comment_5= rulecomment )
+            {
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulecomponent_declaration4853); 
+             
+                createLeafNode(grammarAccess.getComponent_declarationAccess().getIDENTTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2206:1: (lv_subscripts_1= rulearray_subscripts )?
+            int alt52=2;
+            int LA52_0 = input.LA(1);
+
+            if ( (LA52_0==RULE_LBRACK) ) {
+                alt52=1;
+            }
+            switch (alt52) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2209:6: lv_subscripts_1= rulearray_subscripts
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getSubscriptsArray_subscriptsParserRuleCall_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulearray_subscripts_in_rulecomponent_declaration4886);
+                    lv_subscripts_1=rulearray_subscripts();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "subscripts", lv_subscripts_1, "array_subscripts", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2227:3: (lv_modification_2= rulemodification )?
+            int alt53=2;
+            int LA53_0 = input.LA(1);
+
+            if ( ((LA53_0>=RULE_EQUALS && LA53_0<=RULE_LPAR)||LA53_0==RULE_ASSIGN) ) {
+                alt53=1;
+            }
+            switch (alt53) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2230:6: lv_modification_2= rulemodification
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getModificationModificationParserRuleCall_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulemodification_in_rulecomponent_declaration4925);
+                    lv_modification_2=rulemodification();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "modification", lv_modification_2, "modification", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2248:3: ( 'if' (lv_condition_4= ruleexpression ) )?
+            int alt54=2;
+            int LA54_0 = input.LA(1);
+
+            if ( (LA54_0==69) ) {
+                alt54=1;
+            }
+            switch (alt54) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2248:4: 'if' (lv_condition_4= ruleexpression )
+                    {
+                    match(input,69,FOLLOW_69_in_rulecomponent_declaration4940); 
+
+                            createLeafNode(grammarAccess.getComponent_declarationAccess().getIfKeyword_3_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2252:1: (lv_condition_4= ruleexpression )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2255:6: lv_condition_4= ruleexpression
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getConditionExpressionParserRuleCall_3_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleexpression_in_rulecomponent_declaration4974);
+                    lv_condition_4=ruleexpression();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "condition", lv_condition_4, "expression", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2273:4: (lv_comment_5= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2276:6: lv_comment_5= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getComponent_declarationAccess().getCommentCommentParserRuleCall_4_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_rulecomponent_declaration5014);
+            lv_comment_5=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getComponent_declarationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_5, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulecomponent_declaration
+
+
+    // $ANTLR start entryRulemodification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2301:1: entryRulemodification returns [EObject current=null] : iv_rulemodification= rulemodification EOF ;
+    public final EObject entryRulemodification() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulemodification = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2301:54: (iv_rulemodification= rulemodification EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2302:2: iv_rulemodification= rulemodification EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getModificationRule(), currentNode); 
+            pushFollow(FOLLOW_rulemodification_in_entryRulemodification5051);
+            iv_rulemodification=rulemodification();
+            _fsp--;
+
+             current =iv_rulemodification; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulemodification5061); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulemodification
+
+
+    // $ANTLR start rulemodification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2309:1: rulemodification returns [EObject current=null] : (this_class_modification_0= ruleclass_modification | this_SimpleModification_1= ruleSimpleModification ) ;
+    public final EObject rulemodification() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_class_modification_0 = null;
+
+        EObject this_SimpleModification_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2314:6: ( (this_class_modification_0= ruleclass_modification | this_SimpleModification_1= ruleSimpleModification ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2315:1: (this_class_modification_0= ruleclass_modification | this_SimpleModification_1= ruleSimpleModification )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2315:1: (this_class_modification_0= ruleclass_modification | this_SimpleModification_1= ruleSimpleModification )
+            int alt55=2;
+            int LA55_0 = input.LA(1);
+
+            if ( (LA55_0==RULE_LPAR) ) {
+                alt55=1;
+            }
+            else if ( (LA55_0==RULE_EQUALS||LA55_0==RULE_ASSIGN) ) {
+                alt55=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("2315:1: (this_class_modification_0= ruleclass_modification | this_SimpleModification_1= ruleSimpleModification )", 55, 0, input);
+
+                throw nvae;
+            }
+            switch (alt55) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2316:5: this_class_modification_0= ruleclass_modification
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getModificationAccess().getClass_modificationParserRuleCall_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleclass_modification_in_rulemodification5108);
+                    this_class_modification_0=ruleclass_modification();
+                    _fsp--;
+
+                     
+                            current = this_class_modification_0; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2326:5: this_SimpleModification_1= ruleSimpleModification
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getModificationAccess().getSimpleModificationParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleSimpleModification_in_rulemodification5135);
+                    this_SimpleModification_1=ruleSimpleModification();
+                    _fsp--;
+
+                     
+                            current = this_SimpleModification_1; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulemodification
+
+
+    // $ANTLR start entryRuleSimpleModification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2341:1: entryRuleSimpleModification returns [EObject current=null] : iv_ruleSimpleModification= ruleSimpleModification EOF ;
+    public final EObject entryRuleSimpleModification() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSimpleModification = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2341:60: (iv_ruleSimpleModification= ruleSimpleModification EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2342:2: iv_ruleSimpleModification= ruleSimpleModification EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getSimpleModificationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleSimpleModification_in_entryRuleSimpleModification5167);
+            iv_ruleSimpleModification=ruleSimpleModification();
+            _fsp--;
+
+             current =iv_ruleSimpleModification; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSimpleModification5177); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleSimpleModification
+
+
+    // $ANTLR start ruleSimpleModification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2349:1: ruleSimpleModification returns [EObject current=null] : ( ( RULE_EQUALS (lv_expression_1= ruleexpression ) ) | ( RULE_ASSIGN (lv_expression_3= ruleexpression ) ) ) ;
+    public final EObject ruleSimpleModification() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_expression_1 = null;
+
+        AntlrDatatypeRuleToken lv_expression_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2354:6: ( ( ( RULE_EQUALS (lv_expression_1= ruleexpression ) ) | ( RULE_ASSIGN (lv_expression_3= ruleexpression ) ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2355:1: ( ( RULE_EQUALS (lv_expression_1= ruleexpression ) ) | ( RULE_ASSIGN (lv_expression_3= ruleexpression ) ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2355:1: ( ( RULE_EQUALS (lv_expression_1= ruleexpression ) ) | ( RULE_ASSIGN (lv_expression_3= ruleexpression ) ) )
+            int alt56=2;
+            int LA56_0 = input.LA(1);
+
+            if ( (LA56_0==RULE_EQUALS) ) {
+                alt56=1;
+            }
+            else if ( (LA56_0==RULE_ASSIGN) ) {
+                alt56=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("2355:1: ( ( RULE_EQUALS (lv_expression_1= ruleexpression ) ) | ( RULE_ASSIGN (lv_expression_3= ruleexpression ) ) )", 56, 0, input);
+
+                throw nvae;
+            }
+            switch (alt56) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2355:2: ( RULE_EQUALS (lv_expression_1= ruleexpression ) )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2355:2: ( RULE_EQUALS (lv_expression_1= ruleexpression ) )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2355:3: RULE_EQUALS (lv_expression_1= ruleexpression )
+                    {
+                    match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleSimpleModification5212); 
+                     
+                        createLeafNode(grammarAccess.getSimpleModificationAccess().getEQUALSTerminalRuleCall_0_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2359:1: (lv_expression_1= ruleexpression )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2362:6: lv_expression_1= ruleexpression
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getSimpleModificationAccess().getExpressionExpressionParserRuleCall_0_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleexpression_in_ruleSimpleModification5245);
+                    lv_expression_1=ruleexpression();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getSimpleModificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "expression", lv_expression_1, "expression", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2381:6: ( RULE_ASSIGN (lv_expression_3= ruleexpression ) )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2381:6: ( RULE_ASSIGN (lv_expression_3= ruleexpression ) )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2381:7: RULE_ASSIGN (lv_expression_3= ruleexpression )
+                    {
+                    match(input,RULE_ASSIGN,FOLLOW_RULE_ASSIGN_in_ruleSimpleModification5266); 
+                     
+                        createLeafNode(grammarAccess.getSimpleModificationAccess().getASSIGNTerminalRuleCall_1_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2385:1: (lv_expression_3= ruleexpression )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2388:6: lv_expression_3= ruleexpression
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getSimpleModificationAccess().getExpressionExpressionParserRuleCall_1_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleexpression_in_ruleSimpleModification5299);
+                    lv_expression_3=ruleexpression();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getSimpleModificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "expression", lv_expression_3, "expression", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleSimpleModification
+
+
+    // $ANTLR start entryRuleclass_modification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2413:1: entryRuleclass_modification returns [EObject current=null] : iv_ruleclass_modification= ruleclass_modification EOF ;
+    public final EObject entryRuleclass_modification() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleclass_modification = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2413:60: (iv_ruleclass_modification= ruleclass_modification EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2414:2: iv_ruleclass_modification= ruleclass_modification EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getClass_modificationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleclass_modification_in_entryRuleclass_modification5337);
+            iv_ruleclass_modification=ruleclass_modification();
+            _fsp--;
+
+             current =iv_ruleclass_modification; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleclass_modification5347); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleclass_modification
+
+
+    // $ANTLR start ruleclass_modification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2421:1: ruleclass_modification returns [EObject current=null] : ( RULE_LPAR ( (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )* )? RULE_RPAR ( RULE_EQUALS (lv_expression_6= ruleexpression ) )? ) ;
+    public final EObject ruleclass_modification() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_arguments_1 = null;
+
+        EObject lv_arguments_3 = null;
+
+        AntlrDatatypeRuleToken lv_expression_6 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2426:6: ( ( RULE_LPAR ( (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )* )? RULE_RPAR ( RULE_EQUALS (lv_expression_6= ruleexpression ) )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2427:1: ( RULE_LPAR ( (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )* )? RULE_RPAR ( RULE_EQUALS (lv_expression_6= ruleexpression ) )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2427:1: ( RULE_LPAR ( (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )* )? RULE_RPAR ( RULE_EQUALS (lv_expression_6= ruleexpression ) )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2427:2: RULE_LPAR ( (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )* )? RULE_RPAR ( RULE_EQUALS (lv_expression_6= ruleexpression ) )?
+            {
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_ruleclass_modification5381); 
+             
+                createLeafNode(grammarAccess.getClass_modificationAccess().getLPARTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2431:1: ( (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )* )?
+            int alt58=2;
+            int LA58_0 = input.LA(1);
+
+            if ( (LA58_0==RULE_IDENT||LA58_0==43||LA58_0==56||LA58_0==59||LA58_0==70) ) {
+                alt58=1;
+            }
+            switch (alt58) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2431:2: (lv_arguments_1= ruleargument ) ( RULE_COMMA (lv_arguments_3= ruleargument ) )*
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2431:2: (lv_arguments_1= ruleargument )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2434:6: lv_arguments_1= ruleargument
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getClass_modificationAccess().getArgumentsArgumentParserRuleCall_1_0_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleargument_in_ruleclass_modification5415);
+                    lv_arguments_1=ruleargument();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClass_modificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		add(current, "arguments", lv_arguments_1, "argument", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2452:2: ( RULE_COMMA (lv_arguments_3= ruleargument ) )*
+                    loop57:
+                    do {
+                        int alt57=2;
+                        int LA57_0 = input.LA(1);
+
+                        if ( (LA57_0==RULE_COMMA) ) {
+                            alt57=1;
+                        }
+
+
+                        switch (alt57) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2452:3: RULE_COMMA (lv_arguments_3= ruleargument )
+                    	    {
+                    	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_ruleclass_modification5429); 
+                    	     
+                    	        createLeafNode(grammarAccess.getClass_modificationAccess().getCOMMATerminalRuleCall_1_1_0(), null); 
+                    	        
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2456:1: (lv_arguments_3= ruleargument )
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2459:6: lv_arguments_3= ruleargument
+                    	    {
+                    	     
+                    	    	        currentNode=createCompositeNode(grammarAccess.getClass_modificationAccess().getArgumentsArgumentParserRuleCall_1_1_1_0(), currentNode); 
+                    	    	    
+                    	    pushFollow(FOLLOW_ruleargument_in_ruleclass_modification5462);
+                    	    lv_arguments_3=ruleargument();
+                    	    _fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = factory.create(grammarAccess.getClass_modificationRule().getType().getClassifier());
+                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	    	        }
+                    	    	        
+                    	    	        try {
+                    	    	       		add(current, "arguments", lv_arguments_3, "argument", currentNode);
+                    	    	        } catch (ValueConverterException vce) {
+                    	    				handleValueConverterException(vce);
+                    	    	        }
+                    	    	        currentNode = currentNode.getParent();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop57;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_ruleclass_modification5479); 
+             
+                createLeafNode(grammarAccess.getClass_modificationAccess().getRPARTerminalRuleCall_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2481:1: ( RULE_EQUALS (lv_expression_6= ruleexpression ) )?
+            int alt59=2;
+            int LA59_0 = input.LA(1);
+
+            if ( (LA59_0==RULE_EQUALS) ) {
+                alt59=1;
+            }
+            switch (alt59) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2481:2: RULE_EQUALS (lv_expression_6= ruleexpression )
+                    {
+                    match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleclass_modification5488); 
+                     
+                        createLeafNode(grammarAccess.getClass_modificationAccess().getEQUALSTerminalRuleCall_3_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2485:1: (lv_expression_6= ruleexpression )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2488:6: lv_expression_6= ruleexpression
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getClass_modificationAccess().getExpressionExpressionParserRuleCall_3_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleexpression_in_ruleclass_modification5521);
+                    lv_expression_6=ruleexpression();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getClass_modificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "expression", lv_expression_6, "expression", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleclass_modification
+
+
+    // $ANTLR start entryRuleargument
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2513:1: entryRuleargument returns [EObject current=null] : iv_ruleargument= ruleargument EOF ;
+    public final EObject entryRuleargument() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleargument = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2513:50: (iv_ruleargument= ruleargument EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2514:2: iv_ruleargument= ruleargument EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getArgumentRule(), currentNode); 
+            pushFollow(FOLLOW_ruleargument_in_entryRuleargument5560);
+            iv_ruleargument=ruleargument();
+            _fsp--;
+
+             current =iv_ruleargument; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleargument5570); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleargument
+
+
+    // $ANTLR start ruleargument
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2521:1: ruleargument returns [EObject current=null] : ( ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) ) | this_ElementRedeclaration_4= ruleElementRedeclaration ) ;
+    public final EObject ruleargument() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_ElementModification_2 = null;
+
+        EObject this_ElementReplaceableClause_3 = null;
+
+        EObject this_ElementRedeclaration_4 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2526:6: ( ( ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) ) | this_ElementRedeclaration_4= ruleElementRedeclaration ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:1: ( ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) ) | this_ElementRedeclaration_4= ruleElementRedeclaration )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:1: ( ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) ) | this_ElementRedeclaration_4= ruleElementRedeclaration )
+            int alt63=2;
+            int LA63_0 = input.LA(1);
+
+            if ( (LA63_0==RULE_IDENT||LA63_0==43||LA63_0==59||LA63_0==70) ) {
+                alt63=1;
+            }
+            else if ( (LA63_0==56) ) {
+                alt63=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("2527:1: ( ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) ) | this_ElementRedeclaration_4= ruleElementRedeclaration )", 63, 0, input);
+
+                throw nvae;
+            }
+            switch (alt63) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:2: ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:2: ( ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause ) )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:3: ( 'each' )? ( 'final' )? (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:3: ( 'each' )?
+                    int alt60=2;
+                    int LA60_0 = input.LA(1);
+
+                    if ( (LA60_0==70) ) {
+                        alt60=1;
+                    }
+                    switch (alt60) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2527:4: 'each'
+                            {
+                            match(input,70,FOLLOW_70_in_ruleargument5606); 
+
+                                    createLeafNode(grammarAccess.getArgumentAccess().getEachKeyword_0_0(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2531:3: ( 'final' )?
+                    int alt61=2;
+                    int LA61_0 = input.LA(1);
+
+                    if ( (LA61_0==43) ) {
+                        alt61=1;
+                    }
+                    switch (alt61) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2531:4: 'final'
+                            {
+                            match(input,43,FOLLOW_43_in_ruleargument5618); 
+
+                                    createLeafNode(grammarAccess.getArgumentAccess().getFinalKeyword_0_1(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2535:3: (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause )
+                    int alt62=2;
+                    int LA62_0 = input.LA(1);
+
+                    if ( (LA62_0==RULE_IDENT) ) {
+                        alt62=1;
+                    }
+                    else if ( (LA62_0==59) ) {
+                        alt62=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("2535:3: (this_ElementModification_2= ruleElementModification | this_ElementReplaceableClause_3= ruleElementReplaceableClause )", 62, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt62) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2536:5: this_ElementModification_2= ruleElementModification
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getArgumentAccess().getElementModificationParserRuleCall_0_2_0(), currentNode); 
+                                
+                            pushFollow(FOLLOW_ruleElementModification_in_ruleargument5643);
+                            this_ElementModification_2=ruleElementModification();
+                            _fsp--;
+
+                             
+                                    current = this_ElementModification_2; 
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+                        case 2 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2546:5: this_ElementReplaceableClause_3= ruleElementReplaceableClause
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getArgumentAccess().getElementReplaceableClauseParserRuleCall_0_2_1(), currentNode); 
+                                
+                            pushFollow(FOLLOW_ruleElementReplaceableClause_in_ruleargument5670);
+                            this_ElementReplaceableClause_3=ruleElementReplaceableClause();
+                            _fsp--;
+
+                             
+                                    current = this_ElementReplaceableClause_3; 
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2556:5: this_ElementRedeclaration_4= ruleElementRedeclaration
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getArgumentAccess().getElementRedeclarationParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleElementRedeclaration_in_ruleargument5699);
+                    this_ElementRedeclaration_4=ruleElementRedeclaration();
+                    _fsp--;
+
+                     
+                            current = this_ElementRedeclaration_4; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleargument
+
+
+    // $ANTLR start entryRuleElementModification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2571:1: entryRuleElementModification returns [EObject current=null] : iv_ruleElementModification= ruleElementModification EOF ;
+    public final EObject entryRuleElementModification() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleElementModification = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2571:61: (iv_ruleElementModification= ruleElementModification EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2572:2: iv_ruleElementModification= ruleElementModification EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElementModificationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleElementModification_in_entryRuleElementModification5731);
+            iv_ruleElementModification=ruleElementModification();
+            _fsp--;
+
+             current =iv_ruleElementModification; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleElementModification5741); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleElementModification
+
+
+    // $ANTLR start ruleElementModification
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2579:1: ruleElementModification returns [EObject current=null] : ( (lv_componetRef_0= rulecomponent_reference ) (lv_modification_1= rulemodification )? (lv_comment_2= rulestring_comment )? ) ;
+    public final EObject ruleElementModification() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_componetRef_0 = null;
+
+        EObject lv_modification_1 = null;
+
+        AntlrDatatypeRuleToken lv_comment_2 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2584:6: ( ( (lv_componetRef_0= rulecomponent_reference ) (lv_modification_1= rulemodification )? (lv_comment_2= rulestring_comment )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2585:1: ( (lv_componetRef_0= rulecomponent_reference ) (lv_modification_1= rulemodification )? (lv_comment_2= rulestring_comment )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2585:1: ( (lv_componetRef_0= rulecomponent_reference ) (lv_modification_1= rulemodification )? (lv_comment_2= rulestring_comment )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2585:2: (lv_componetRef_0= rulecomponent_reference ) (lv_modification_1= rulemodification )? (lv_comment_2= rulestring_comment )?
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2585:2: (lv_componetRef_0= rulecomponent_reference )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2588:6: lv_componetRef_0= rulecomponent_reference
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getElementModificationAccess().getComponetRefComponent_referenceParserRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomponent_reference_in_ruleElementModification5800);
+            lv_componetRef_0=rulecomponent_reference();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElementModificationRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "componetRef", lv_componetRef_0, "component_reference", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2606:2: (lv_modification_1= rulemodification )?
+            int alt64=2;
+            int LA64_0 = input.LA(1);
+
+            if ( ((LA64_0>=RULE_EQUALS && LA64_0<=RULE_LPAR)||LA64_0==RULE_ASSIGN) ) {
+                alt64=1;
+            }
+            switch (alt64) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2609:6: lv_modification_1= rulemodification
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getElementModificationAccess().getModificationModificationParserRuleCall_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulemodification_in_ruleElementModification5838);
+                    lv_modification_1=rulemodification();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getElementModificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "modification", lv_modification_1, "modification", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2627:3: (lv_comment_2= rulestring_comment )?
+            int alt65=2;
+            int LA65_0 = input.LA(1);
+
+            if ( (LA65_0==RULE_STRING) ) {
+                alt65=1;
+            }
+            switch (alt65) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2630:6: lv_comment_2= rulestring_comment
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getElementModificationAccess().getCommentString_commentParserRuleCall_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulestring_comment_in_ruleElementModification5877);
+                    lv_comment_2=rulestring_comment();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getElementModificationRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "comment", lv_comment_2, "string_comment", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleElementModification
+
+
+    // $ANTLR start entryRuleElementRedeclaration
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2655:1: entryRuleElementRedeclaration returns [EObject current=null] : iv_ruleElementRedeclaration= ruleElementRedeclaration EOF ;
+    public final EObject entryRuleElementRedeclaration() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleElementRedeclaration = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2655:62: (iv_ruleElementRedeclaration= ruleElementRedeclaration EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2656:2: iv_ruleElementRedeclaration= ruleElementRedeclaration EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElementRedeclarationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleElementRedeclaration_in_entryRuleElementRedeclaration5915);
+            iv_ruleElementRedeclaration=ruleElementRedeclaration();
+            _fsp--;
+
+             current =iv_ruleElementRedeclaration; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleElementRedeclaration5925); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleElementRedeclaration
+
+
+    // $ANTLR start ruleElementRedeclaration
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2663:1: ruleElementRedeclaration returns [EObject current=null] : ( 'redeclare' ( 'each' )? ( 'final' )? ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause ) ) ;
+    public final EObject ruleElementRedeclaration() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_ClassDefinition_3 = null;
+
+        EObject this_ElementComponentClause_4 = null;
+
+        EObject this_ElementReplaceableClause_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2668:6: ( ( 'redeclare' ( 'each' )? ( 'final' )? ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2669:1: ( 'redeclare' ( 'each' )? ( 'final' )? ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2669:1: ( 'redeclare' ( 'each' )? ( 'final' )? ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2669:2: 'redeclare' ( 'each' )? ( 'final' )? ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause )
+            {
+            match(input,56,FOLLOW_56_in_ruleElementRedeclaration5959); 
+
+                    createLeafNode(grammarAccess.getElementRedeclarationAccess().getRedeclareKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2673:1: ( 'each' )?
+            int alt66=2;
+            int LA66_0 = input.LA(1);
+
+            if ( (LA66_0==70) ) {
+                alt66=1;
+            }
+            switch (alt66) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2673:2: 'each'
+                    {
+                    match(input,70,FOLLOW_70_in_ruleElementRedeclaration5969); 
+
+                            createLeafNode(grammarAccess.getElementRedeclarationAccess().getEachKeyword_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2677:3: ( 'final' )?
+            int alt67=2;
+            int LA67_0 = input.LA(1);
+
+            if ( (LA67_0==43) ) {
+                alt67=1;
+            }
+            switch (alt67) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2677:4: 'final'
+                    {
+                    match(input,43,FOLLOW_43_in_ruleElementRedeclaration5981); 
+
+                            createLeafNode(grammarAccess.getElementRedeclarationAccess().getFinalKeyword_2(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2681:3: ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause )
+            int alt69=2;
+            int LA69_0 = input.LA(1);
+
+            if ( (LA69_0==RULE_IDENT||(LA69_0>=44 && LA69_0<=46)||LA69_0==49||(LA69_0>=62 && LA69_0<=68)||(LA69_0>=92 && LA69_0<=98)) ) {
+                alt69=1;
+            }
+            else if ( (LA69_0==59) ) {
+                alt69=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("2681:3: ( (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause ) | this_ElementReplaceableClause_5= ruleElementReplaceableClause )", 69, 0, input);
+
+                throw nvae;
+            }
+            switch (alt69) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2681:4: (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2681:4: (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause )
+                    int alt68=2;
+                    int LA68_0 = input.LA(1);
+
+                    if ( ((LA68_0>=44 && LA68_0<=46)||LA68_0==49||(LA68_0>=92 && LA68_0<=98)) ) {
+                        alt68=1;
+                    }
+                    else if ( (LA68_0==RULE_IDENT||(LA68_0>=62 && LA68_0<=68)) ) {
+                        alt68=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("2681:4: (this_ClassDefinition_3= ruleClassDefinition | this_ElementComponentClause_4= ruleElementComponentClause )", 68, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt68) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2682:5: this_ClassDefinition_3= ruleClassDefinition
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getElementRedeclarationAccess().getClassDefinitionParserRuleCall_3_0_0(), currentNode); 
+                                
+                            pushFollow(FOLLOW_ruleClassDefinition_in_ruleElementRedeclaration6007);
+                            this_ClassDefinition_3=ruleClassDefinition();
+                            _fsp--;
+
+                             
+                                    current = this_ClassDefinition_3; 
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+                        case 2 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2692:5: this_ElementComponentClause_4= ruleElementComponentClause
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getElementRedeclarationAccess().getElementComponentClauseParserRuleCall_3_0_1(), currentNode); 
+                                
+                            pushFollow(FOLLOW_ruleElementComponentClause_in_ruleElementRedeclaration6034);
+                            this_ElementComponentClause_4=ruleElementComponentClause();
+                            _fsp--;
+
+                             
+                                    current = this_ElementComponentClause_4; 
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2702:5: this_ElementReplaceableClause_5= ruleElementReplaceableClause
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getElementRedeclarationAccess().getElementReplaceableClauseParserRuleCall_3_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleElementReplaceableClause_in_ruleElementRedeclaration6062);
+                    this_ElementReplaceableClause_5=ruleElementReplaceableClause();
+                    _fsp--;
+
+                     
+                            current = this_ElementReplaceableClause_5; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleElementRedeclaration
+
+
+    // $ANTLR start entryRuleElementReplaceableClause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2717:1: entryRuleElementReplaceableClause returns [EObject current=null] : iv_ruleElementReplaceableClause= ruleElementReplaceableClause EOF ;
+    public final EObject entryRuleElementReplaceableClause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleElementReplaceableClause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2717:66: (iv_ruleElementReplaceableClause= ruleElementReplaceableClause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2718:2: iv_ruleElementReplaceableClause= ruleElementReplaceableClause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElementReplaceableClauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleElementReplaceableClause_in_entryRuleElementReplaceableClause6095);
+            iv_ruleElementReplaceableClause=ruleElementReplaceableClause();
+            _fsp--;
+
+             current =iv_ruleElementReplaceableClause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleElementReplaceableClause6105); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleElementReplaceableClause
+
+
+    // $ANTLR start ruleElementReplaceableClause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2725:1: ruleElementReplaceableClause returns [EObject current=null] : ( 'replaceable' (lv_element_1= ( ruleClassDefinition | ruleElementComponentClause ) ) (lv_constraint_2= ruleconstraining_clause )? ) ;
+    public final EObject ruleElementReplaceableClause() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_element_1=null;
+        EObject lv_constraint_2 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2730:6: ( ( 'replaceable' (lv_element_1= ( ruleClassDefinition | ruleElementComponentClause ) ) (lv_constraint_2= ruleconstraining_clause )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2731:1: ( 'replaceable' (lv_element_1= ( ruleClassDefinition | ruleElementComponentClause ) ) (lv_constraint_2= ruleconstraining_clause )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2731:1: ( 'replaceable' (lv_element_1= ( ruleClassDefinition | ruleElementComponentClause ) ) (lv_constraint_2= ruleconstraining_clause )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2731:2: 'replaceable' (lv_element_1= ( ruleClassDefinition | ruleElementComponentClause ) ) (lv_constraint_2= ruleconstraining_clause )?
+            {
+            match(input,59,FOLLOW_59_in_ruleElementReplaceableClause6139); 
+
+                    createLeafNode(grammarAccess.getElementReplaceableClauseAccess().getReplaceableKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2735:1: (lv_element_1= ( ruleClassDefinition | ruleElementComponentClause ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2737:6: lv_element_1= ( ruleClassDefinition | ruleElementComponentClause )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2737:19: ( ruleClassDefinition | ruleElementComponentClause )
+            int alt70=2;
+            int LA70_0 = input.LA(1);
+
+            if ( ((LA70_0>=44 && LA70_0<=46)||LA70_0==49||(LA70_0>=92 && LA70_0<=98)) ) {
+                alt70=1;
+            }
+            else if ( (LA70_0==RULE_IDENT||(LA70_0>=62 && LA70_0<=68)) ) {
+                alt70=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("2737:19: ( ruleClassDefinition | ruleElementComponentClause )", 70, 0, input);
+
+                throw nvae;
+            }
+            switch (alt70) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2737:21: ruleClassDefinition
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getElementReplaceableClauseAccess().getElementClassDefinitionParserRuleCall_1_0_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleClassDefinition_in_ruleElementReplaceableClause6165);
+                    ruleClassDefinition();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2744:7: ruleElementComponentClause
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getElementReplaceableClauseAccess().getElementElementComponentClauseParserRuleCall_1_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleElementComponentClause_in_ruleElementReplaceableClause6179);
+                    ruleElementComponentClause();
+                    _fsp--;
+
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode, current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "element", lv_element_1, null, lastConsumedNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2765:2: (lv_constraint_2= ruleconstraining_clause )?
+            int alt71=2;
+            int LA71_0 = input.LA(1);
+
+            if ( (LA71_0==47||LA71_0==61) ) {
+                alt71=1;
+            }
+            switch (alt71) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2768:6: lv_constraint_2= ruleconstraining_clause
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getElementReplaceableClauseAccess().getConstraintConstraining_clauseParserRuleCall_2_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleconstraining_clause_in_ruleElementReplaceableClause6222);
+                    lv_constraint_2=ruleconstraining_clause();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getElementReplaceableClauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "constraint", lv_constraint_2, "constraining_clause", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleElementReplaceableClause
+
+
+    // $ANTLR start entryRuleElementComponentClause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2793:1: entryRuleElementComponentClause returns [EObject current=null] : iv_ruleElementComponentClause= ruleElementComponentClause EOF ;
+    public final EObject entryRuleElementComponentClause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleElementComponentClause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2793:64: (iv_ruleElementComponentClause= ruleElementComponentClause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2794:2: iv_ruleElementComponentClause= ruleElementComponentClause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElementComponentClauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleElementComponentClause_in_entryRuleElementComponentClause6260);
+            iv_ruleElementComponentClause=ruleElementComponentClause();
+            _fsp--;
+
+             current =iv_ruleElementComponentClause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleElementComponentClause6270); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleElementComponentClause
+
+
+    // $ANTLR start ruleElementComponentClause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2801:1: ruleElementComponentClause returns [EObject current=null] : ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) RULE_IDENT (lv_subscripts_3= rulearray_subscripts )? (lv_modification_4= rulemodification )? (lv_comment_5= rulecomment ) ) ;
+    public final EObject ruleElementComponentClause() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_typePrefix_0 = null;
+
+        EObject lv_typeSpecifier_1 = null;
+
+        AntlrDatatypeRuleToken lv_subscripts_3 = null;
+
+        EObject lv_modification_4 = null;
+
+        EObject lv_comment_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2806:6: ( ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) RULE_IDENT (lv_subscripts_3= rulearray_subscripts )? (lv_modification_4= rulemodification )? (lv_comment_5= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2807:1: ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) RULE_IDENT (lv_subscripts_3= rulearray_subscripts )? (lv_modification_4= rulemodification )? (lv_comment_5= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2807:1: ( (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) RULE_IDENT (lv_subscripts_3= rulearray_subscripts )? (lv_modification_4= rulemodification )? (lv_comment_5= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2807:2: (lv_typePrefix_0= ruletype_prefix ) (lv_typeSpecifier_1= ruletype_specifier ) RULE_IDENT (lv_subscripts_3= rulearray_subscripts )? (lv_modification_4= rulemodification )? (lv_comment_5= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2807:2: (lv_typePrefix_0= ruletype_prefix )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2810:6: lv_typePrefix_0= ruletype_prefix
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getTypePrefixType_prefixParserRuleCall_0_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruletype_prefix_in_ruleElementComponentClause6329);
+            lv_typePrefix_0=ruletype_prefix();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "typePrefix", lv_typePrefix_0, "type_prefix", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2828:2: (lv_typeSpecifier_1= ruletype_specifier )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2831:6: lv_typeSpecifier_1= ruletype_specifier
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getTypeSpecifierType_specifierParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruletype_specifier_in_ruleElementComponentClause6367);
+            lv_typeSpecifier_1=ruletype_specifier();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "typeSpecifier", lv_typeSpecifier_1, "type_specifier", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleElementComponentClause6380); 
+             
+                createLeafNode(grammarAccess.getElementComponentClauseAccess().getIDENTTerminalRuleCall_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2853:1: (lv_subscripts_3= rulearray_subscripts )?
+            int alt72=2;
+            int LA72_0 = input.LA(1);
+
+            if ( (LA72_0==RULE_LBRACK) ) {
+                alt72=1;
+            }
+            switch (alt72) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2856:6: lv_subscripts_3= rulearray_subscripts
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getSubscriptsArray_subscriptsParserRuleCall_3_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulearray_subscripts_in_ruleElementComponentClause6413);
+                    lv_subscripts_3=rulearray_subscripts();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "subscripts", lv_subscripts_3, "array_subscripts", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2874:3: (lv_modification_4= rulemodification )?
+            int alt73=2;
+            int LA73_0 = input.LA(1);
+
+            if ( ((LA73_0>=RULE_EQUALS && LA73_0<=RULE_LPAR)||LA73_0==RULE_ASSIGN) ) {
+                alt73=1;
+            }
+            switch (alt73) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2877:6: lv_modification_4= rulemodification
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getModificationModificationParserRuleCall_4_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulemodification_in_ruleElementComponentClause6452);
+                    lv_modification_4=rulemodification();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "modification", lv_modification_4, "modification", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2895:3: (lv_comment_5= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2898:6: lv_comment_5= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getElementComponentClauseAccess().getCommentCommentParserRuleCall_5_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleElementComponentClause6491);
+            lv_comment_5=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElementComponentClauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_5, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleElementComponentClause
+
+
+    // $ANTLR start entryRuleequation_rule_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2923:1: entryRuleequation_rule_clause returns [EObject current=null] : iv_ruleequation_rule_clause= ruleequation_rule_clause EOF ;
+    public final EObject entryRuleequation_rule_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleequation_rule_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2923:62: (iv_ruleequation_rule_clause= ruleequation_rule_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2924:2: iv_ruleequation_rule_clause= ruleequation_rule_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getEquation_rule_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleequation_rule_clause_in_entryRuleequation_rule_clause6528);
+            iv_ruleequation_rule_clause=ruleequation_rule_clause();
+            _fsp--;
+
+             current =iv_ruleequation_rule_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleequation_rule_clause6538); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleequation_rule_clause
+
+
+    // $ANTLR start ruleequation_rule_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2931:1: ruleequation_rule_clause returns [EObject current=null] : ( 'equation' ( ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ ) ;
+    public final EObject ruleequation_rule_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_equationRules_1 = null;
+
+        EObject lv_annotations_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2936:6: ( ( 'equation' ( ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2937:1: ( 'equation' ( ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2937:1: ( 'equation' ( ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2937:2: 'equation' ( ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+
+            {
+            match(input,71,FOLLOW_71_in_ruleequation_rule_clause6572); 
+
+                    createLeafNode(grammarAccess.getEquation_rule_clauseAccess().getEquationKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2941:1: ( ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+
+            int cnt74=0;
+            loop74:
+            do {
+                int alt74=3;
+                switch ( input.LA(1) ) {
+                case 48:
+                    {
+                    int LA74_2 = input.LA(2);
+
+                    if ( (LA74_2==RULE_SEMICOLON||LA74_2==RULE_EQUALS||LA74_2==RULE_COLON||LA74_2==RULE_STRING||(LA74_2>=RULE_LESS && LA74_2<=RULE_POWER_EW)||(LA74_2>=86 && LA74_2<=87)||LA74_2==91) ) {
+                        alt74=1;
+                    }
+
+
+                    }
+                    break;
+                case 73:
+                    {
+                    int LA74_3 = input.LA(2);
+
+                    if ( (LA74_3==RULE_LPAR) ) {
+                        alt74=1;
+                    }
+
+
+                    }
+                    break;
+                case RULE_IDENT:
+                case RULE_LPAR:
+                case RULE_STRING:
+                case RULE_PLUS:
+                case RULE_MINUS:
+                case RULE_PLUS_EW:
+                case RULE_MINUS_EW:
+                case RULE_UNSIGNED_INTEGER:
+                case RULE_UNSIGNED_REAL:
+                case RULE_LBRACK:
+                case RULE_LBRACE:
+                case 50:
+                case 69:
+                case 78:
+                case 81:
+                case 84:
+                case 88:
+                case 89:
+                case 90:
+                    {
+                    alt74=1;
+                    }
+                    break;
+                case 91:
+                    {
+                    alt74=2;
+                    }
+                    break;
+
+                }
+
+                switch (alt74) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2941:2: ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2941:2: ( (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2941:3: (lv_equationRules_1= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2941:3: (lv_equationRules_1= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2944:6: lv_equationRules_1= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_clauseAccess().getEquationRulesEquation_ruleParserRuleCall_1_0_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_ruleequation_rule_clause6608);
+            	    lv_equationRules_1=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "equationRules", lv_equationRules_1, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleequation_rule_clause6621); 
+            	     
+            	        createLeafNode(grammarAccess.getEquation_rule_clauseAccess().getSEMICOLONTerminalRuleCall_1_0_1(), null); 
+            	        
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2967:6: ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2967:6: ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2967:7: (lv_annotations_3= ruleannotation ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2967:7: (lv_annotations_3= ruleannotation )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2970:6: lv_annotations_3= ruleannotation
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_clauseAccess().getAnnotationsAnnotationParserRuleCall_1_1_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleannotation_in_ruleequation_rule_clause6662);
+            	    lv_annotations_3=ruleannotation();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getEquation_rule_clauseRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "annotations", lv_annotations_3, "annotation", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleequation_rule_clause6675); 
+            	     
+            	        createLeafNode(grammarAccess.getEquation_rule_clauseAccess().getSEMICOLONTerminalRuleCall_1_1_1(), null); 
+            	        
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt74 >= 1 ) break loop74;
+                        EarlyExitException eee =
+                            new EarlyExitException(74, input);
+                        throw eee;
+                }
+                cnt74++;
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleequation_rule_clause
+
+
+    // $ANTLR start entryRulealgorithm_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2999:1: entryRulealgorithm_clause returns [EObject current=null] : iv_rulealgorithm_clause= rulealgorithm_clause EOF ;
+    public final EObject entryRulealgorithm_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulealgorithm_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:2999:58: (iv_rulealgorithm_clause= rulealgorithm_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3000:2: iv_rulealgorithm_clause= rulealgorithm_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getAlgorithm_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_rulealgorithm_clause_in_entryRulealgorithm_clause6710);
+            iv_rulealgorithm_clause=rulealgorithm_clause();
+            _fsp--;
+
+             current =iv_rulealgorithm_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulealgorithm_clause6720); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulealgorithm_clause
+
+
+    // $ANTLR start rulealgorithm_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3007:1: rulealgorithm_clause returns [EObject current=null] : ( 'algorithm' ( ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ ) ;
+    public final EObject rulealgorithm_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_algorithmRules_1 = null;
+
+        EObject lv_annotations_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3012:6: ( ( 'algorithm' ( ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3013:1: ( 'algorithm' ( ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3013:1: ( 'algorithm' ( ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+ )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3013:2: 'algorithm' ( ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+
+            {
+            match(input,72,FOLLOW_72_in_rulealgorithm_clause6754); 
+
+                    createLeafNode(grammarAccess.getAlgorithm_clauseAccess().getAlgorithmKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3017:1: ( ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON ) | ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON ) )+
+            int cnt75=0;
+            loop75:
+            do {
+                int alt75=3;
+                switch ( input.LA(1) ) {
+                case 48:
+                    {
+                    int LA75_2 = input.LA(2);
+
+                    if ( (LA75_2==RULE_SEMICOLON||LA75_2==RULE_EQUALS||LA75_2==RULE_COLON||(LA75_2>=RULE_STRING && LA75_2<=RULE_ASSIGN)||(LA75_2>=RULE_LESS && LA75_2<=RULE_POWER_EW)||(LA75_2>=86 && LA75_2<=87)||LA75_2==91) ) {
+                        alt75=1;
+                    }
+
+
+                    }
+                    break;
+                case 73:
+                    {
+                    int LA75_3 = input.LA(2);
+
+                    if ( (LA75_3==RULE_LPAR) ) {
+                        alt75=1;
+                    }
+
+
+                    }
+                    break;
+                case RULE_IDENT:
+                case RULE_LPAR:
+                case RULE_STRING:
+                case RULE_PLUS:
+                case RULE_MINUS:
+                case RULE_PLUS_EW:
+                case RULE_MINUS_EW:
+                case RULE_UNSIGNED_INTEGER:
+                case RULE_UNSIGNED_REAL:
+                case RULE_LBRACK:
+                case RULE_LBRACE:
+                case 50:
+                case 69:
+                case 74:
+                case 75:
+                case 78:
+                case 80:
+                case 81:
+                case 88:
+                case 89:
+                case 90:
+                    {
+                    alt75=1;
+                    }
+                    break;
+                case 91:
+                    {
+                    alt75=2;
+                    }
+                    break;
+
+                }
+
+                switch (alt75) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3017:2: ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3017:2: ( (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3017:3: (lv_algorithmRules_1= rulealgorithm ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3017:3: (lv_algorithmRules_1= rulealgorithm )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3020:6: lv_algorithmRules_1= rulealgorithm
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_clauseAccess().getAlgorithmRulesAlgorithmParserRuleCall_1_0_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulealgorithm_in_rulealgorithm_clause6790);
+            	    lv_algorithmRules_1=rulealgorithm();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "algorithmRules", lv_algorithmRules_1, "algorithm", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulealgorithm_clause6803); 
+            	     
+            	        createLeafNode(grammarAccess.getAlgorithm_clauseAccess().getSEMICOLONTerminalRuleCall_1_0_1(), null); 
+            	        
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3043:6: ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON )
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3043:6: ( (lv_annotations_3= ruleannotation ) RULE_SEMICOLON )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3043:7: (lv_annotations_3= ruleannotation ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3043:7: (lv_annotations_3= ruleannotation )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3046:6: lv_annotations_3= ruleannotation
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_clauseAccess().getAnnotationsAnnotationParserRuleCall_1_1_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleannotation_in_rulealgorithm_clause6844);
+            	    lv_annotations_3=ruleannotation();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getAlgorithm_clauseRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "annotations", lv_annotations_3, "annotation", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulealgorithm_clause6857); 
+            	     
+            	        createLeafNode(grammarAccess.getAlgorithm_clauseAccess().getSEMICOLONTerminalRuleCall_1_1_1(), null); 
+            	        
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt75 >= 1 ) break loop75;
+                        EarlyExitException eee =
+                            new EarlyExitException(75, input);
+                        throw eee;
+                }
+                cnt75++;
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulealgorithm_clause
+
+
+    // $ANTLR start entryRuleinitial_equation_rule_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3075:1: entryRuleinitial_equation_rule_clause returns [EObject current=null] : iv_ruleinitial_equation_rule_clause= ruleinitial_equation_rule_clause EOF ;
+    public final EObject entryRuleinitial_equation_rule_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleinitial_equation_rule_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3075:70: (iv_ruleinitial_equation_rule_clause= ruleinitial_equation_rule_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3076:2: iv_ruleinitial_equation_rule_clause= ruleinitial_equation_rule_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getInitial_equation_rule_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleinitial_equation_rule_clause_in_entryRuleinitial_equation_rule_clause6892);
+            iv_ruleinitial_equation_rule_clause=ruleinitial_equation_rule_clause();
+            _fsp--;
+
+             current =iv_ruleinitial_equation_rule_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleinitial_equation_rule_clause6902); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleinitial_equation_rule_clause
+
+
+    // $ANTLR start ruleinitial_equation_rule_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3083:1: ruleinitial_equation_rule_clause returns [EObject current=null] : ( 'initial' this_equation_rule_clause_1= ruleequation_rule_clause ) ;
+    public final EObject ruleinitial_equation_rule_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_equation_rule_clause_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3088:6: ( ( 'initial' this_equation_rule_clause_1= ruleequation_rule_clause ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3089:1: ( 'initial' this_equation_rule_clause_1= ruleequation_rule_clause )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3089:1: ( 'initial' this_equation_rule_clause_1= ruleequation_rule_clause )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3089:2: 'initial' this_equation_rule_clause_1= ruleequation_rule_clause
+            {
+            match(input,73,FOLLOW_73_in_ruleinitial_equation_rule_clause6936); 
+
+                    createLeafNode(grammarAccess.getInitial_equation_rule_clauseAccess().getInitialKeyword_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getInitial_equation_rule_clauseAccess().getEquation_rule_clauseParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleequation_rule_clause_in_ruleinitial_equation_rule_clause6958);
+            this_equation_rule_clause_1=ruleequation_rule_clause();
+            _fsp--;
+
+             
+                    current = this_equation_rule_clause_1; 
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleinitial_equation_rule_clause
+
+
+    // $ANTLR start entryRuleinitial_algorithm_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3109:1: entryRuleinitial_algorithm_clause returns [EObject current=null] : iv_ruleinitial_algorithm_clause= ruleinitial_algorithm_clause EOF ;
+    public final EObject entryRuleinitial_algorithm_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleinitial_algorithm_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3109:66: (iv_ruleinitial_algorithm_clause= ruleinitial_algorithm_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3110:2: iv_ruleinitial_algorithm_clause= ruleinitial_algorithm_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getInitial_algorithm_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleinitial_algorithm_clause_in_entryRuleinitial_algorithm_clause6990);
+            iv_ruleinitial_algorithm_clause=ruleinitial_algorithm_clause();
+            _fsp--;
+
+             current =iv_ruleinitial_algorithm_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleinitial_algorithm_clause7000); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleinitial_algorithm_clause
+
+
+    // $ANTLR start ruleinitial_algorithm_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3117:1: ruleinitial_algorithm_clause returns [EObject current=null] : ( 'initial' this_algorithm_clause_1= rulealgorithm_clause ) ;
+    public final EObject ruleinitial_algorithm_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_algorithm_clause_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3122:6: ( ( 'initial' this_algorithm_clause_1= rulealgorithm_clause ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3123:1: ( 'initial' this_algorithm_clause_1= rulealgorithm_clause )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3123:1: ( 'initial' this_algorithm_clause_1= rulealgorithm_clause )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3123:2: 'initial' this_algorithm_clause_1= rulealgorithm_clause
+            {
+            match(input,73,FOLLOW_73_in_ruleinitial_algorithm_clause7034); 
+
+                    createLeafNode(grammarAccess.getInitial_algorithm_clauseAccess().getInitialKeyword_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getInitial_algorithm_clauseAccess().getAlgorithm_clauseParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_rulealgorithm_clause_in_ruleinitial_algorithm_clause7056);
+            this_algorithm_clause_1=rulealgorithm_clause();
+            _fsp--;
+
+             
+                    current = this_algorithm_clause_1; 
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleinitial_algorithm_clause
+
+
+    // $ANTLR start entryRuleequation_rule
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3143:1: entryRuleequation_rule returns [EObject current=null] : iv_ruleequation_rule= ruleequation_rule EOF ;
+    public final EObject entryRuleequation_rule() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleequation_rule = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3143:55: (iv_ruleequation_rule= ruleequation_rule EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3144:2: iv_ruleequation_rule= ruleequation_rule EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getEquation_ruleRule(), currentNode); 
+            pushFollow(FOLLOW_ruleequation_rule_in_entryRuleequation_rule7088);
+            iv_ruleequation_rule=ruleequation_rule();
+            _fsp--;
+
+             current =iv_ruleequation_rule; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleequation_rule7098); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleequation_rule
+
+
+    // $ANTLR start ruleequation_rule
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3151:1: ruleequation_rule returns [EObject current=null] : ( ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e ) (lv_comment_5= rulecomment ) ) ;
+    public final EObject ruleequation_rule() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_conditional_equation_rule_e_1 = null;
+
+        EObject this_for_clause_e_2 = null;
+
+        EObject this_when_clause_e_4 = null;
+
+        EObject lv_comment_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3156:6: ( ( ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e ) (lv_comment_5= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3157:1: ( ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e ) (lv_comment_5= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3157:1: ( ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e ) (lv_comment_5= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3157:2: ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e ) (lv_comment_5= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3157:2: ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e )
+            int alt76=5;
+            switch ( input.LA(1) ) {
+            case RULE_IDENT:
+            case RULE_LPAR:
+            case RULE_STRING:
+            case RULE_PLUS:
+            case RULE_MINUS:
+            case RULE_PLUS_EW:
+            case RULE_MINUS_EW:
+            case RULE_UNSIGNED_INTEGER:
+            case RULE_UNSIGNED_REAL:
+            case RULE_LBRACK:
+            case RULE_LBRACE:
+            case 48:
+            case 50:
+            case 73:
+            case 88:
+            case 89:
+            case 90:
+                {
+                alt76=1;
+                }
+                break;
+            case 69:
+                {
+                alt76=2;
+                }
+                break;
+            case 78:
+                {
+                alt76=3;
+                }
+                break;
+            case 84:
+                {
+                alt76=4;
+                }
+                break;
+            case 81:
+                {
+                alt76=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("3157:2: ( ruleequality_equation_rule | this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e | this_for_clause_e_2= rulefor_clause_e | ruleconnect_clause | this_when_clause_e_4= rulewhen_clause_e )", 76, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt76) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3157:3: ruleequality_equation_rule
+                    {
+                    pushFollow(FOLLOW_ruleequality_equation_rule_in_ruleequation_rule7133);
+                    ruleequality_equation_rule();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3159:5: this_conditional_equation_rule_e_1= ruleconditional_equation_rule_e
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getConditional_equation_rule_eParserRuleCall_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleconditional_equation_rule_e_in_ruleequation_rule7153);
+                    this_conditional_equation_rule_e_1=ruleconditional_equation_rule_e();
+                    _fsp--;
+
+                     
+                            current = this_conditional_equation_rule_e_1; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3169:5: this_for_clause_e_2= rulefor_clause_e
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getFor_clause_eParserRuleCall_0_2(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefor_clause_e_in_ruleequation_rule7180);
+                    this_for_clause_e_2=rulefor_clause_e();
+                    _fsp--;
+
+                     
+                            current = this_for_clause_e_2; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3178:6: ruleconnect_clause
+                    {
+                    pushFollow(FOLLOW_ruleconnect_clause_in_ruleequation_rule7194);
+                    ruleconnect_clause();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3180:5: this_when_clause_e_4= rulewhen_clause_e
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getWhen_clause_eParserRuleCall_0_4(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulewhen_clause_e_in_ruleequation_rule7214);
+                    this_when_clause_e_4=rulewhen_clause_e();
+                    _fsp--;
+
+                     
+                            current = this_when_clause_e_4; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3188:2: (lv_comment_5= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3191:6: lv_comment_5= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getEquation_ruleAccess().getCommentCommentParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_ruleequation_rule7248);
+            lv_comment_5=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getEquation_ruleRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_5, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleequation_rule
+
+
+    // $ANTLR start entryRulealgorithm
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3216:1: entryRulealgorithm returns [EObject current=null] : iv_rulealgorithm= rulealgorithm EOF ;
+    public final EObject entryRulealgorithm() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulealgorithm = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3216:51: (iv_rulealgorithm= rulealgorithm EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3217:2: iv_rulealgorithm= rulealgorithm EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getAlgorithmRule(), currentNode); 
+            pushFollow(FOLLOW_rulealgorithm_in_entryRulealgorithm7285);
+            iv_rulealgorithm=rulealgorithm();
+            _fsp--;
+
+             current =iv_rulealgorithm; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulealgorithm7295); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulealgorithm
+
+
+    // $ANTLR start rulealgorithm
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3224:1: rulealgorithm returns [EObject current=null] : ( ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' ) (lv_comment_7= rulecomment ) ) ;
+    public final EObject rulealgorithm() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_conditional_equation_rule_a_1 = null;
+
+        EObject this_for_clause_a_2 = null;
+
+        EObject this_while_clause_3 = null;
+
+        EObject this_when_clause_a_4 = null;
+
+        EObject lv_comment_7 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3229:6: ( ( ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' ) (lv_comment_7= rulecomment ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3230:1: ( ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' ) (lv_comment_7= rulecomment ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3230:1: ( ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' ) (lv_comment_7= rulecomment ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3230:2: ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' ) (lv_comment_7= rulecomment )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3230:2: ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' )
+            int alt77=7;
+            switch ( input.LA(1) ) {
+            case RULE_IDENT:
+            case RULE_LPAR:
+            case RULE_STRING:
+            case RULE_PLUS:
+            case RULE_MINUS:
+            case RULE_PLUS_EW:
+            case RULE_MINUS_EW:
+            case RULE_UNSIGNED_INTEGER:
+            case RULE_UNSIGNED_REAL:
+            case RULE_LBRACK:
+            case RULE_LBRACE:
+            case 48:
+            case 50:
+            case 73:
+            case 88:
+            case 89:
+            case 90:
+                {
+                alt77=1;
+                }
+                break;
+            case 69:
+                {
+                alt77=2;
+                }
+                break;
+            case 78:
+                {
+                alt77=3;
+                }
+                break;
+            case 80:
+                {
+                alt77=4;
+                }
+                break;
+            case 81:
+                {
+                alt77=5;
+                }
+                break;
+            case 74:
+                {
+                alt77=6;
+                }
+                break;
+            case 75:
+                {
+                alt77=7;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("3230:2: ( ruleassign_clause_a | this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a | this_for_clause_a_2= rulefor_clause_a | this_while_clause_3= rulewhile_clause | this_when_clause_a_4= rulewhen_clause_a | 'break' | 'return' )", 77, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt77) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3230:3: ruleassign_clause_a
+                    {
+                    pushFollow(FOLLOW_ruleassign_clause_a_in_rulealgorithm7330);
+                    ruleassign_clause_a();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3232:5: this_conditional_equation_rule_a_1= ruleconditional_equation_rule_a
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getConditional_equation_rule_aParserRuleCall_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleconditional_equation_rule_a_in_rulealgorithm7350);
+                    this_conditional_equation_rule_a_1=ruleconditional_equation_rule_a();
+                    _fsp--;
+
+                     
+                            current = this_conditional_equation_rule_a_1; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3242:5: this_for_clause_a_2= rulefor_clause_a
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getFor_clause_aParserRuleCall_0_2(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefor_clause_a_in_rulealgorithm7377);
+                    this_for_clause_a_2=rulefor_clause_a();
+                    _fsp--;
+
+                     
+                            current = this_for_clause_a_2; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3252:5: this_while_clause_3= rulewhile_clause
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getWhile_clauseParserRuleCall_0_3(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulewhile_clause_in_rulealgorithm7404);
+                    this_while_clause_3=rulewhile_clause();
+                    _fsp--;
+
+                     
+                            current = this_while_clause_3; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3262:5: this_when_clause_a_4= rulewhen_clause_a
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getWhen_clause_aParserRuleCall_0_4(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulewhen_clause_a_in_rulealgorithm7431);
+                    this_when_clause_a_4=rulewhen_clause_a();
+                    _fsp--;
+
+                     
+                            current = this_when_clause_a_4; 
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 6 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3271:6: 'break'
+                    {
+                    match(input,74,FOLLOW_74_in_rulealgorithm7445); 
+
+                            createLeafNode(grammarAccess.getAlgorithmAccess().getBreakKeyword_0_5(), null); 
+                        
+
+                    }
+                    break;
+                case 7 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3276:6: 'return'
+                    {
+                    match(input,75,FOLLOW_75_in_rulealgorithm7460); 
+
+                            createLeafNode(grammarAccess.getAlgorithmAccess().getReturnKeyword_0_6(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3280:2: (lv_comment_7= rulecomment )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3283:6: lv_comment_7= rulecomment
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getAlgorithmAccess().getCommentCommentParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulecomment_in_rulealgorithm7495);
+            lv_comment_7=rulecomment();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getAlgorithmRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "comment", lv_comment_7, "comment", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulealgorithm
+
+
+    // $ANTLR start entryRuleassign_clause_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3308:1: entryRuleassign_clause_a returns [String current=null] : iv_ruleassign_clause_a= ruleassign_clause_a EOF ;
+    public final String entryRuleassign_clause_a() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleassign_clause_a = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3308:56: (iv_ruleassign_clause_a= ruleassign_clause_a EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3309:2: iv_ruleassign_clause_a= ruleassign_clause_a EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getAssign_clause_aRule(), currentNode); 
+            pushFollow(FOLLOW_ruleassign_clause_a_in_entryRuleassign_clause_a7533);
+            iv_ruleassign_clause_a=ruleassign_clause_a();
+            _fsp--;
+
+             current =iv_ruleassign_clause_a.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleassign_clause_a7544); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleassign_clause_a
+
+
+    // $ANTLR start ruleassign_clause_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3316:1: ruleassign_clause_a returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_simple_expression_0= rulesimple_expression ( (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression ) | (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression ) )? ) ;
+    public final AntlrDatatypeRuleToken ruleassign_clause_a() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_ASSIGN_1=null;
+        Token this_EQUALS_3=null;
+        AntlrDatatypeRuleToken this_simple_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_expression_2 = null;
+
+        AntlrDatatypeRuleToken this_expression_4 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3322:6: ( (this_simple_expression_0= rulesimple_expression ( (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression ) | (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression ) )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3323:1: (this_simple_expression_0= rulesimple_expression ( (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression ) | (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression ) )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3323:1: (this_simple_expression_0= rulesimple_expression ( (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression ) | (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression ) )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3324:5: this_simple_expression_0= rulesimple_expression ( (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression ) | (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression ) )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getAssign_clause_aAccess().getSimple_expressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulesimple_expression_in_ruleassign_clause_a7591);
+            this_simple_expression_0=rulesimple_expression();
+            _fsp--;
+
+
+            		current.merge(this_simple_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3334:1: ( (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression ) | (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression ) )?
+            int alt78=3;
+            int LA78_0 = input.LA(1);
+
+            if ( (LA78_0==RULE_ASSIGN) ) {
+                alt78=1;
+            }
+            else if ( (LA78_0==RULE_EQUALS) ) {
+                alt78=2;
+            }
+            switch (alt78) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3334:2: (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3334:2: (this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3334:7: this_ASSIGN_1= RULE_ASSIGN this_expression_2= ruleexpression
+                    {
+                    this_ASSIGN_1=(Token)input.LT(1);
+                    match(input,RULE_ASSIGN,FOLLOW_RULE_ASSIGN_in_ruleassign_clause_a7613); 
+
+                    		current.merge(this_ASSIGN_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getAssign_clause_aAccess().getASSIGNTerminalRuleCall_1_0_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getAssign_clause_aAccess().getExpressionParserRuleCall_1_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_in_ruleassign_clause_a7640);
+                    this_expression_2=ruleexpression();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_2);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3353:6: (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3353:6: (this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3353:11: this_EQUALS_3= RULE_EQUALS this_expression_4= ruleexpression
+                    {
+                    this_EQUALS_3=(Token)input.LT(1);
+                    match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleassign_clause_a7668); 
+
+                    		current.merge(this_EQUALS_3);
+                        
+                     
+                        createLeafNode(grammarAccess.getAssign_clause_aAccess().getEQUALSTerminalRuleCall_1_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getAssign_clause_aAccess().getExpressionParserRuleCall_1_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_in_ruleassign_clause_a7695);
+                    this_expression_4=ruleexpression();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_4);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleassign_clause_a
+
+
+    // $ANTLR start entryRuleequality_equation_rule
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3379:1: entryRuleequality_equation_rule returns [String current=null] : iv_ruleequality_equation_rule= ruleequality_equation_rule EOF ;
+    public final String entryRuleequality_equation_rule() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleequality_equation_rule = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3379:63: (iv_ruleequality_equation_rule= ruleequality_equation_rule EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3380:2: iv_ruleequality_equation_rule= ruleequality_equation_rule EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getEquality_equation_ruleRule(), currentNode); 
+            pushFollow(FOLLOW_ruleequality_equation_rule_in_entryRuleequality_equation_rule7742);
+            iv_ruleequality_equation_rule=ruleequality_equation_rule();
+            _fsp--;
+
+             current =iv_ruleequality_equation_rule.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleequality_equation_rule7753); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleequality_equation_rule
+
+
+    // $ANTLR start ruleequality_equation_rule
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3387:1: ruleequality_equation_rule returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_simple_expression_0= rulesimple_expression (this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )? ) ;
+    public final AntlrDatatypeRuleToken ruleequality_equation_rule() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_EQUALS_1=null;
+        AntlrDatatypeRuleToken this_simple_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_expression_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3393:6: ( (this_simple_expression_0= rulesimple_expression (this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3394:1: (this_simple_expression_0= rulesimple_expression (this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3394:1: (this_simple_expression_0= rulesimple_expression (this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3395:5: this_simple_expression_0= rulesimple_expression (this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getEquality_equation_ruleAccess().getSimple_expressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulesimple_expression_in_ruleequality_equation_rule7800);
+            this_simple_expression_0=rulesimple_expression();
+            _fsp--;
+
+
+            		current.merge(this_simple_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3405:1: (this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )?
+            int alt79=2;
+            int LA79_0 = input.LA(1);
+
+            if ( (LA79_0==RULE_EQUALS) ) {
+                alt79=1;
+            }
+            switch (alt79) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3405:6: this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression
+                    {
+                    this_EQUALS_1=(Token)input.LT(1);
+                    match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_ruleequality_equation_rule7821); 
+
+                    		current.merge(this_EQUALS_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getEquality_equation_ruleAccess().getEQUALSTerminalRuleCall_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getEquality_equation_ruleAccess().getExpressionParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_in_ruleequality_equation_rule7848);
+                    this_expression_2=ruleexpression();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_2);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleequality_equation_rule
+
+
+    // $ANTLR start entryRuleconditional_equation_rule_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3431:1: entryRuleconditional_equation_rule_e returns [EObject current=null] : iv_ruleconditional_equation_rule_e= ruleconditional_equation_rule_e EOF ;
+    public final EObject entryRuleconditional_equation_rule_e() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleconditional_equation_rule_e = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3431:69: (iv_ruleconditional_equation_rule_e= ruleconditional_equation_rule_e EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3432:2: iv_ruleconditional_equation_rule_e= ruleconditional_equation_rule_e EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConditional_equation_rule_eRule(), currentNode); 
+            pushFollow(FOLLOW_ruleconditional_equation_rule_e_in_entryRuleconditional_equation_rule_e7893);
+            iv_ruleconditional_equation_rule_e=ruleconditional_equation_rule_e();
+            _fsp--;
+
+             current =iv_ruleconditional_equation_rule_e; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleconditional_equation_rule_e7903); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleconditional_equation_rule_e
+
+
+    // $ANTLR start ruleconditional_equation_rule_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3439:1: ruleconditional_equation_rule_e returns [EObject current=null] : ( 'if' ruleexpression 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseifClauses_5= ruleequation_rule_elseif )* ( 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )* )? 'end' 'if' ) ;
+    public final EObject ruleconditional_equation_rule_e() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_thenEquationClauses_3 = null;
+
+        EObject lv_elseifClauses_5 = null;
+
+        EObject lv_elseEquationClauses_7 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3444:6: ( ( 'if' ruleexpression 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseifClauses_5= ruleequation_rule_elseif )* ( 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )* )? 'end' 'if' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3445:1: ( 'if' ruleexpression 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseifClauses_5= ruleequation_rule_elseif )* ( 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )* )? 'end' 'if' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3445:1: ( 'if' ruleexpression 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseifClauses_5= ruleequation_rule_elseif )* ( 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )* )? 'end' 'if' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3445:2: 'if' ruleexpression 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseifClauses_5= ruleequation_rule_elseif )* ( 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )* )? 'end' 'if'
+            {
+            match(input,69,FOLLOW_69_in_ruleconditional_equation_rule_e7937); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getIfKeyword_0(), null); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleconditional_equation_rule_e7946);
+            ruleexpression();
+            _fsp--;
+
+            match(input,76,FOLLOW_76_in_ruleconditional_equation_rule_e7947); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3453:1: ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop80:
+            do {
+                int alt80=2;
+                int LA80_0 = input.LA(1);
+
+                if ( (LA80_0==48) ) {
+                    int LA80_2 = input.LA(2);
+
+                    if ( (LA80_2==RULE_SEMICOLON||LA80_2==RULE_EQUALS||LA80_2==RULE_COLON||LA80_2==RULE_STRING||(LA80_2>=RULE_LESS && LA80_2<=RULE_POWER_EW)||(LA80_2>=86 && LA80_2<=87)||LA80_2==91) ) {
+                        alt80=1;
+                    }
+
+
+                }
+                else if ( (LA80_0==RULE_IDENT||LA80_0==RULE_LPAR||LA80_0==RULE_STRING||(LA80_0>=RULE_PLUS && LA80_0<=RULE_MINUS_EW)||(LA80_0>=RULE_UNSIGNED_INTEGER && LA80_0<=RULE_LBRACK)||LA80_0==RULE_LBRACE||LA80_0==50||LA80_0==69||LA80_0==73||LA80_0==78||LA80_0==81||LA80_0==84||(LA80_0>=88 && LA80_0<=90)) ) {
+                    alt80=1;
+                }
+
+
+                switch (alt80) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3453:2: (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3453:2: (lv_thenEquationClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3456:6: lv_thenEquationClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_ruleconditional_equation_rule_e7982);
+            	    lv_thenEquationClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_e7995); 
+            	     
+            	        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop80;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3478:3: (lv_elseifClauses_5= ruleequation_rule_elseif )*
+            loop81:
+            do {
+                int alt81=2;
+                int LA81_0 = input.LA(1);
+
+                if ( (LA81_0==83) ) {
+                    alt81=1;
+                }
+
+
+                switch (alt81) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3481:6: lv_elseifClauses_5= ruleequation_rule_elseif
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_eAccess().getElseifClausesEquation_rule_elseifParserRuleCall_4_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_elseif_in_ruleconditional_equation_rule_e8030);
+            	    lv_elseifClauses_5=ruleequation_rule_elseif();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "elseifClauses", lv_elseifClauses_5, "equation_rule_elseif", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop81;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3499:3: ( 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )* )?
+            int alt83=2;
+            int LA83_0 = input.LA(1);
+
+            if ( (LA83_0==77) ) {
+                alt83=1;
+            }
+            switch (alt83) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3499:4: 'else' ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )*
+                    {
+                    match(input,77,FOLLOW_77_in_ruleconditional_equation_rule_e8045); 
+
+                            createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getElseKeyword_5_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3503:1: ( (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON )*
+                    loop82:
+                    do {
+                        int alt82=2;
+                        int LA82_0 = input.LA(1);
+
+                        if ( (LA82_0==48) ) {
+                            int LA82_1 = input.LA(2);
+
+                            if ( (LA82_1==RULE_SEMICOLON||LA82_1==RULE_EQUALS||LA82_1==RULE_COLON||LA82_1==RULE_STRING||(LA82_1>=RULE_LESS && LA82_1<=RULE_POWER_EW)||(LA82_1>=86 && LA82_1<=87)||LA82_1==91) ) {
+                                alt82=1;
+                            }
+
+
+                        }
+                        else if ( (LA82_0==RULE_IDENT||LA82_0==RULE_LPAR||LA82_0==RULE_STRING||(LA82_0>=RULE_PLUS && LA82_0<=RULE_MINUS_EW)||(LA82_0>=RULE_UNSIGNED_INTEGER && LA82_0<=RULE_LBRACK)||LA82_0==RULE_LBRACE||LA82_0==50||LA82_0==69||LA82_0==73||LA82_0==78||LA82_0==81||LA82_0==84||(LA82_0>=88 && LA82_0<=90)) ) {
+                            alt82=1;
+                        }
+
+
+                        switch (alt82) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3503:2: (lv_elseEquationClauses_7= ruleequation_rule ) RULE_SEMICOLON
+                    	    {
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3503:2: (lv_elseEquationClauses_7= ruleequation_rule )
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3506:6: lv_elseEquationClauses_7= ruleequation_rule
+                    	    {
+                    	     
+                    	    	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_eAccess().getElseEquationClausesEquation_ruleParserRuleCall_5_1_0_0(), currentNode); 
+                    	    	    
+                    	    pushFollow(FOLLOW_ruleequation_rule_in_ruleconditional_equation_rule_e8080);
+                    	    lv_elseEquationClauses_7=ruleequation_rule();
+                    	    _fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = factory.create(grammarAccess.getConditional_equation_rule_eRule().getType().getClassifier());
+                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	    	        }
+                    	    	        
+                    	    	        try {
+                    	    	       		add(current, "elseEquationClauses", lv_elseEquationClauses_7, "equation_rule", currentNode);
+                    	    	        } catch (ValueConverterException vce) {
+                    	    				handleValueConverterException(vce);
+                    	    	        }
+                    	    	        currentNode = currentNode.getParent();
+                    	    	    
+
+                    	    }
+
+                    	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_e8093); 
+                    	     
+                    	        createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getSEMICOLONTerminalRuleCall_5_1_1(), null); 
+                    	        
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop82;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,48,FOLLOW_48_in_ruleconditional_equation_rule_e8105); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getEndKeyword_6(), null); 
+                
+            match(input,69,FOLLOW_69_in_ruleconditional_equation_rule_e8114); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_eAccess().getIfKeyword_7(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleconditional_equation_rule_e
+
+
+    // $ANTLR start entryRuleconditional_equation_rule_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3543:1: entryRuleconditional_equation_rule_a returns [EObject current=null] : iv_ruleconditional_equation_rule_a= ruleconditional_equation_rule_a EOF ;
+    public final EObject entryRuleconditional_equation_rule_a() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleconditional_equation_rule_a = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3543:69: (iv_ruleconditional_equation_rule_a= ruleconditional_equation_rule_a EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3544:2: iv_ruleconditional_equation_rule_a= ruleconditional_equation_rule_a EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConditional_equation_rule_aRule(), currentNode); 
+            pushFollow(FOLLOW_ruleconditional_equation_rule_a_in_entryRuleconditional_equation_rule_a8147);
+            iv_ruleconditional_equation_rule_a=ruleconditional_equation_rule_a();
+            _fsp--;
+
+             current =iv_ruleconditional_equation_rule_a; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleconditional_equation_rule_a8157); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleconditional_equation_rule_a
+
+
+    // $ANTLR start ruleconditional_equation_rule_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3551:1: ruleconditional_equation_rule_a returns [EObject current=null] : ( 'if' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* (lv_elseifClauses_5= rulealgorithm_elseif )* ( 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )* )? 'end' 'if' ) ;
+    public final EObject ruleconditional_equation_rule_a() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenAlgorithmClauses_3 = null;
+
+        EObject lv_elseifClauses_5 = null;
+
+        EObject lv_elseAlgotithmClauses_7 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3556:6: ( ( 'if' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* (lv_elseifClauses_5= rulealgorithm_elseif )* ( 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )* )? 'end' 'if' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3557:1: ( 'if' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* (lv_elseifClauses_5= rulealgorithm_elseif )* ( 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )* )? 'end' 'if' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3557:1: ( 'if' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* (lv_elseifClauses_5= rulealgorithm_elseif )* ( 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )* )? 'end' 'if' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3557:2: 'if' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* (lv_elseifClauses_5= rulealgorithm_elseif )* ( 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )* )? 'end' 'if'
+            {
+            match(input,69,FOLLOW_69_in_ruleconditional_equation_rule_a8191); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getIfKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3561:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3564:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_ruleconditional_equation_rule_a8225);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_ruleconditional_equation_rule_a8238); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3586:1: ( (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )*
+            loop84:
+            do {
+                int alt84=2;
+                int LA84_0 = input.LA(1);
+
+                if ( (LA84_0==48) ) {
+                    int LA84_2 = input.LA(2);
+
+                    if ( (LA84_2==RULE_SEMICOLON||LA84_2==RULE_EQUALS||LA84_2==RULE_COLON||(LA84_2>=RULE_STRING && LA84_2<=RULE_ASSIGN)||(LA84_2>=RULE_LESS && LA84_2<=RULE_POWER_EW)||(LA84_2>=86 && LA84_2<=87)||LA84_2==91) ) {
+                        alt84=1;
+                    }
+
+
+                }
+                else if ( (LA84_0==RULE_IDENT||LA84_0==RULE_LPAR||LA84_0==RULE_STRING||(LA84_0>=RULE_PLUS && LA84_0<=RULE_MINUS_EW)||(LA84_0>=RULE_UNSIGNED_INTEGER && LA84_0<=RULE_LBRACK)||LA84_0==RULE_LBRACE||LA84_0==50||LA84_0==69||(LA84_0>=73 && LA84_0<=75)||LA84_0==78||(LA84_0>=80 && LA84_0<=81)||(LA84_0>=88 && LA84_0<=90)) ) {
+                    alt84=1;
+                }
+
+
+                switch (alt84) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3586:2: (lv_thenAlgorithmClauses_3= rulealgorithm ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3586:2: (lv_thenAlgorithmClauses_3= rulealgorithm )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3589:6: lv_thenAlgorithmClauses_3= rulealgorithm
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getThenAlgorithmClausesAlgorithmParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulealgorithm_in_ruleconditional_equation_rule_a8273);
+            	    lv_thenAlgorithmClauses_3=rulealgorithm();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "algorithm", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_a8286); 
+            	     
+            	        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop84;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3611:3: (lv_elseifClauses_5= rulealgorithm_elseif )*
+            loop85:
+            do {
+                int alt85=2;
+                int LA85_0 = input.LA(1);
+
+                if ( (LA85_0==83) ) {
+                    alt85=1;
+                }
+
+
+                switch (alt85) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3614:6: lv_elseifClauses_5= rulealgorithm_elseif
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getElseifClausesAlgorithm_elseifParserRuleCall_4_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulealgorithm_elseif_in_ruleconditional_equation_rule_a8321);
+            	    lv_elseifClauses_5=rulealgorithm_elseif();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "elseifClauses", lv_elseifClauses_5, "algorithm_elseif", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop85;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3632:3: ( 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )* )?
+            int alt87=2;
+            int LA87_0 = input.LA(1);
+
+            if ( (LA87_0==77) ) {
+                alt87=1;
+            }
+            switch (alt87) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3632:4: 'else' ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )*
+                    {
+                    match(input,77,FOLLOW_77_in_ruleconditional_equation_rule_a8336); 
+
+                            createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getElseKeyword_5_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3636:1: ( (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON )*
+                    loop86:
+                    do {
+                        int alt86=2;
+                        int LA86_0 = input.LA(1);
+
+                        if ( (LA86_0==48) ) {
+                            int LA86_1 = input.LA(2);
+
+                            if ( (LA86_1==RULE_SEMICOLON||LA86_1==RULE_EQUALS||LA86_1==RULE_COLON||(LA86_1>=RULE_STRING && LA86_1<=RULE_ASSIGN)||(LA86_1>=RULE_LESS && LA86_1<=RULE_POWER_EW)||(LA86_1>=86 && LA86_1<=87)||LA86_1==91) ) {
+                                alt86=1;
+                            }
+
+
+                        }
+                        else if ( (LA86_0==RULE_IDENT||LA86_0==RULE_LPAR||LA86_0==RULE_STRING||(LA86_0>=RULE_PLUS && LA86_0<=RULE_MINUS_EW)||(LA86_0>=RULE_UNSIGNED_INTEGER && LA86_0<=RULE_LBRACK)||LA86_0==RULE_LBRACE||LA86_0==50||LA86_0==69||(LA86_0>=73 && LA86_0<=75)||LA86_0==78||(LA86_0>=80 && LA86_0<=81)||(LA86_0>=88 && LA86_0<=90)) ) {
+                            alt86=1;
+                        }
+
+
+                        switch (alt86) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3636:2: (lv_elseAlgotithmClauses_7= rulealgorithm ) RULE_SEMICOLON
+                    	    {
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3636:2: (lv_elseAlgotithmClauses_7= rulealgorithm )
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3639:6: lv_elseAlgotithmClauses_7= rulealgorithm
+                    	    {
+                    	     
+                    	    	        currentNode=createCompositeNode(grammarAccess.getConditional_equation_rule_aAccess().getElseAlgotithmClausesAlgorithmParserRuleCall_5_1_0_0(), currentNode); 
+                    	    	    
+                    	    pushFollow(FOLLOW_rulealgorithm_in_ruleconditional_equation_rule_a8371);
+                    	    lv_elseAlgotithmClauses_7=rulealgorithm();
+                    	    _fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = factory.create(grammarAccess.getConditional_equation_rule_aRule().getType().getClassifier());
+                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	    	        }
+                    	    	        
+                    	    	        try {
+                    	    	       		add(current, "elseAlgotithmClauses", lv_elseAlgotithmClauses_7, "algorithm", currentNode);
+                    	    	        } catch (ValueConverterException vce) {
+                    	    				handleValueConverterException(vce);
+                    	    	        }
+                    	    	        currentNode = currentNode.getParent();
+                    	    	    
+
+                    	    }
+
+                    	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_a8384); 
+                    	     
+                    	        createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getSEMICOLONTerminalRuleCall_5_1_1(), null); 
+                    	        
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop86;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,48,FOLLOW_48_in_ruleconditional_equation_rule_a8396); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getEndKeyword_6(), null); 
+                
+            match(input,69,FOLLOW_69_in_ruleconditional_equation_rule_a8405); 
+
+                    createLeafNode(grammarAccess.getConditional_equation_rule_aAccess().getIfKeyword_7(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleconditional_equation_rule_a
+
+
+    // $ANTLR start entryRulefor_clause_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3676:1: entryRulefor_clause_e returns [EObject current=null] : iv_rulefor_clause_e= rulefor_clause_e EOF ;
+    public final EObject entryRulefor_clause_e() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulefor_clause_e = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3676:54: (iv_rulefor_clause_e= rulefor_clause_e EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3677:2: iv_rulefor_clause_e= rulefor_clause_e EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFor_clause_eRule(), currentNode); 
+            pushFollow(FOLLOW_rulefor_clause_e_in_entryRulefor_clause_e8438);
+            iv_rulefor_clause_e=rulefor_clause_e();
+            _fsp--;
+
+             current =iv_rulefor_clause_e; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefor_clause_e8448); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefor_clause_e
+
+
+    // $ANTLR start rulefor_clause_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3684:1: rulefor_clause_e returns [EObject current=null] : ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* 'end' 'for' ) ;
+    public final EObject rulefor_clause_e() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_forIndices_1 = null;
+
+        EObject lv_equationClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3689:6: ( ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* 'end' 'for' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3690:1: ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* 'end' 'for' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3690:1: ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* 'end' 'for' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3690:2: 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* 'end' 'for'
+            {
+            match(input,78,FOLLOW_78_in_rulefor_clause_e8482); 
+
+                    createLeafNode(grammarAccess.getFor_clause_eAccess().getForKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3694:1: (lv_forIndices_1= rulefor_indices )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3697:6: lv_forIndices_1= rulefor_indices
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getFor_clause_eAccess().getForIndicesFor_indicesParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulefor_indices_in_rulefor_clause_e8516);
+            lv_forIndices_1=rulefor_indices();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getFor_clause_eRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "forIndices", lv_forIndices_1, "for_indices", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,79,FOLLOW_79_in_rulefor_clause_e8529); 
+
+                    createLeafNode(grammarAccess.getFor_clause_eAccess().getLoopKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3719:1: ( (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop88:
+            do {
+                int alt88=2;
+                int LA88_0 = input.LA(1);
+
+                if ( (LA88_0==48) ) {
+                    int LA88_1 = input.LA(2);
+
+                    if ( (LA88_1==RULE_SEMICOLON||LA88_1==RULE_EQUALS||LA88_1==RULE_COLON||LA88_1==RULE_STRING||(LA88_1>=RULE_LESS && LA88_1<=RULE_POWER_EW)||(LA88_1>=86 && LA88_1<=87)||LA88_1==91) ) {
+                        alt88=1;
+                    }
+
+
+                }
+                else if ( (LA88_0==RULE_IDENT||LA88_0==RULE_LPAR||LA88_0==RULE_STRING||(LA88_0>=RULE_PLUS && LA88_0<=RULE_MINUS_EW)||(LA88_0>=RULE_UNSIGNED_INTEGER && LA88_0<=RULE_LBRACK)||LA88_0==RULE_LBRACE||LA88_0==50||LA88_0==69||LA88_0==73||LA88_0==78||LA88_0==81||LA88_0==84||(LA88_0>=88 && LA88_0<=90)) ) {
+                    alt88=1;
+                }
+
+
+                switch (alt88) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3719:2: (lv_equationClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3719:2: (lv_equationClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3722:6: lv_equationClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getFor_clause_eAccess().getEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_rulefor_clause_e8564);
+            	    lv_equationClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getFor_clause_eRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "equationClauses", lv_equationClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulefor_clause_e8577); 
+            	     
+            	        createLeafNode(grammarAccess.getFor_clause_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop88;
+                }
+            } while (true);
+
+            match(input,48,FOLLOW_48_in_rulefor_clause_e8587); 
+
+                    createLeafNode(grammarAccess.getFor_clause_eAccess().getEndKeyword_4(), null); 
+                
+            match(input,78,FOLLOW_78_in_rulefor_clause_e8596); 
+
+                    createLeafNode(grammarAccess.getFor_clause_eAccess().getForKeyword_5(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefor_clause_e
+
+
+    // $ANTLR start entryRulefor_clause_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3759:1: entryRulefor_clause_a returns [EObject current=null] : iv_rulefor_clause_a= rulefor_clause_a EOF ;
+    public final EObject entryRulefor_clause_a() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulefor_clause_a = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3759:54: (iv_rulefor_clause_a= rulefor_clause_a EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3760:2: iv_rulefor_clause_a= rulefor_clause_a EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFor_clause_aRule(), currentNode); 
+            pushFollow(FOLLOW_rulefor_clause_a_in_entryRulefor_clause_a8629);
+            iv_rulefor_clause_a=rulefor_clause_a();
+            _fsp--;
+
+             current =iv_rulefor_clause_a; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefor_clause_a8639); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefor_clause_a
+
+
+    // $ANTLR start rulefor_clause_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3767:1: rulefor_clause_a returns [EObject current=null] : ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'for' ) ;
+    public final EObject rulefor_clause_a() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_forIndices_1 = null;
+
+        EObject lv_algorithmClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3772:6: ( ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'for' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3773:1: ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'for' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3773:1: ( 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'for' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3773:2: 'for' (lv_forIndices_1= rulefor_indices ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'for'
+            {
+            match(input,78,FOLLOW_78_in_rulefor_clause_a8673); 
+
+                    createLeafNode(grammarAccess.getFor_clause_aAccess().getForKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3777:1: (lv_forIndices_1= rulefor_indices )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3780:6: lv_forIndices_1= rulefor_indices
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getFor_clause_aAccess().getForIndicesFor_indicesParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_rulefor_indices_in_rulefor_clause_a8707);
+            lv_forIndices_1=rulefor_indices();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getFor_clause_aRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "forIndices", lv_forIndices_1, "for_indices", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,79,FOLLOW_79_in_rulefor_clause_a8720); 
+
+                    createLeafNode(grammarAccess.getFor_clause_aAccess().getLoopKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3802:1: ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )*
+            loop89:
+            do {
+                int alt89=2;
+                int LA89_0 = input.LA(1);
+
+                if ( (LA89_0==48) ) {
+                    int LA89_1 = input.LA(2);
+
+                    if ( (LA89_1==RULE_SEMICOLON||LA89_1==RULE_EQUALS||LA89_1==RULE_COLON||(LA89_1>=RULE_STRING && LA89_1<=RULE_ASSIGN)||(LA89_1>=RULE_LESS && LA89_1<=RULE_POWER_EW)||(LA89_1>=86 && LA89_1<=87)||LA89_1==91) ) {
+                        alt89=1;
+                    }
+
+
+                }
+                else if ( (LA89_0==RULE_IDENT||LA89_0==RULE_LPAR||LA89_0==RULE_STRING||(LA89_0>=RULE_PLUS && LA89_0<=RULE_MINUS_EW)||(LA89_0>=RULE_UNSIGNED_INTEGER && LA89_0<=RULE_LBRACK)||LA89_0==RULE_LBRACE||LA89_0==50||LA89_0==69||(LA89_0>=73 && LA89_0<=75)||LA89_0==78||(LA89_0>=80 && LA89_0<=81)||(LA89_0>=88 && LA89_0<=90)) ) {
+                    alt89=1;
+                }
+
+
+                switch (alt89) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3802:2: (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3802:2: (lv_algorithmClauses_3= rulealgorithm )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3805:6: lv_algorithmClauses_3= rulealgorithm
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getFor_clause_aAccess().getAlgorithmClausesAlgorithmParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulealgorithm_in_rulefor_clause_a8755);
+            	    lv_algorithmClauses_3=rulealgorithm();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getFor_clause_aRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "algorithmClauses", lv_algorithmClauses_3, "algorithm", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulefor_clause_a8768); 
+            	     
+            	        createLeafNode(grammarAccess.getFor_clause_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop89;
+                }
+            } while (true);
+
+            match(input,48,FOLLOW_48_in_rulefor_clause_a8778); 
+
+                    createLeafNode(grammarAccess.getFor_clause_aAccess().getEndKeyword_4(), null); 
+                
+            match(input,78,FOLLOW_78_in_rulefor_clause_a8787); 
+
+                    createLeafNode(grammarAccess.getFor_clause_aAccess().getForKeyword_5(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefor_clause_a
+
+
+    // $ANTLR start entryRulewhile_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3842:1: entryRulewhile_clause returns [EObject current=null] : iv_rulewhile_clause= rulewhile_clause EOF ;
+    public final EObject entryRulewhile_clause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulewhile_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3842:54: (iv_rulewhile_clause= rulewhile_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3843:2: iv_rulewhile_clause= rulewhile_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getWhile_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_rulewhile_clause_in_entryRulewhile_clause8820);
+            iv_rulewhile_clause=rulewhile_clause();
+            _fsp--;
+
+             current =iv_rulewhile_clause; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulewhile_clause8830); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulewhile_clause
+
+
+    // $ANTLR start rulewhile_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3850:1: rulewhile_clause returns [EObject current=null] : ( 'while' (lv_condition_1= ruleexpression ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'while' ) ;
+    public final EObject rulewhile_clause() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_algorithmClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3855:6: ( ( 'while' (lv_condition_1= ruleexpression ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'while' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3856:1: ( 'while' (lv_condition_1= ruleexpression ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'while' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3856:1: ( 'while' (lv_condition_1= ruleexpression ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'while' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3856:2: 'while' (lv_condition_1= ruleexpression ) 'loop' ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )* 'end' 'while'
+            {
+            match(input,80,FOLLOW_80_in_rulewhile_clause8864); 
+
+                    createLeafNode(grammarAccess.getWhile_clauseAccess().getWhileKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3860:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3863:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getWhile_clauseAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_rulewhile_clause8898);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getWhile_clauseRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,79,FOLLOW_79_in_rulewhile_clause8911); 
+
+                    createLeafNode(grammarAccess.getWhile_clauseAccess().getLoopKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3885:1: ( (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON )*
+            loop90:
+            do {
+                int alt90=2;
+                int LA90_0 = input.LA(1);
+
+                if ( (LA90_0==48) ) {
+                    int LA90_1 = input.LA(2);
+
+                    if ( (LA90_1==RULE_SEMICOLON||LA90_1==RULE_EQUALS||LA90_1==RULE_COLON||(LA90_1>=RULE_STRING && LA90_1<=RULE_ASSIGN)||(LA90_1>=RULE_LESS && LA90_1<=RULE_POWER_EW)||(LA90_1>=86 && LA90_1<=87)||LA90_1==91) ) {
+                        alt90=1;
+                    }
+
+
+                }
+                else if ( (LA90_0==RULE_IDENT||LA90_0==RULE_LPAR||LA90_0==RULE_STRING||(LA90_0>=RULE_PLUS && LA90_0<=RULE_MINUS_EW)||(LA90_0>=RULE_UNSIGNED_INTEGER && LA90_0<=RULE_LBRACK)||LA90_0==RULE_LBRACE||LA90_0==50||LA90_0==69||(LA90_0>=73 && LA90_0<=75)||LA90_0==78||(LA90_0>=80 && LA90_0<=81)||(LA90_0>=88 && LA90_0<=90)) ) {
+                    alt90=1;
+                }
+
+
+                switch (alt90) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3885:2: (lv_algorithmClauses_3= rulealgorithm ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3885:2: (lv_algorithmClauses_3= rulealgorithm )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3888:6: lv_algorithmClauses_3= rulealgorithm
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getWhile_clauseAccess().getAlgorithmClausesAlgorithmParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_rulealgorithm_in_rulewhile_clause8946);
+            	    lv_algorithmClauses_3=rulealgorithm();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getWhile_clauseRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "algorithmClauses", lv_algorithmClauses_3, "algorithm", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulewhile_clause8959); 
+            	     
+            	        createLeafNode(grammarAccess.getWhile_clauseAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop90;
+                }
+            } while (true);
+
+            match(input,48,FOLLOW_48_in_rulewhile_clause8969); 
+
+                    createLeafNode(grammarAccess.getWhile_clauseAccess().getEndKeyword_4(), null); 
+                
+            match(input,80,FOLLOW_80_in_rulewhile_clause8978); 
+
+                    createLeafNode(grammarAccess.getWhile_clauseAccess().getWhileKeyword_5(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulewhile_clause
+
+
+    // $ANTLR start entryRulewhen_clause_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3925:1: entryRulewhen_clause_e returns [EObject current=null] : iv_rulewhen_clause_e= rulewhen_clause_e EOF ;
+    public final EObject entryRulewhen_clause_e() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulewhen_clause_e = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3925:55: (iv_rulewhen_clause_e= rulewhen_clause_e EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3926:2: iv_rulewhen_clause_e= rulewhen_clause_e EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getWhen_clause_eRule(), currentNode); 
+            pushFollow(FOLLOW_rulewhen_clause_e_in_entryRulewhen_clause_e9011);
+            iv_rulewhen_clause_e=rulewhen_clause_e();
+            _fsp--;
+
+             current =iv_rulewhen_clause_e; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulewhen_clause_e9021); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulewhen_clause_e
+
+
+    // $ANTLR start rulewhen_clause_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3933:1: rulewhen_clause_e returns [EObject current=null] : ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_e )* 'end' 'when' ) ;
+    public final EObject rulewhen_clause_e() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenEquationClauses_3 = null;
+
+        EObject lv_elseWhenClauses_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3938:6: ( ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_e )* 'end' 'when' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3939:1: ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_e )* 'end' 'when' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3939:1: ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_e )* 'end' 'when' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3939:2: 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_e )* 'end' 'when'
+            {
+            match(input,81,FOLLOW_81_in_rulewhen_clause_e9055); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_eAccess().getWhenKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3943:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3946:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_eAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_rulewhen_clause_e9089);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getWhen_clause_eRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_rulewhen_clause_e9102); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_eAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3968:1: ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop91:
+            do {
+                int alt91=2;
+                int LA91_0 = input.LA(1);
+
+                if ( (LA91_0==48) ) {
+                    int LA91_2 = input.LA(2);
+
+                    if ( (LA91_2==RULE_SEMICOLON||LA91_2==RULE_EQUALS||LA91_2==RULE_COLON||LA91_2==RULE_STRING||(LA91_2>=RULE_LESS && LA91_2<=RULE_POWER_EW)||(LA91_2>=86 && LA91_2<=87)||LA91_2==91) ) {
+                        alt91=1;
+                    }
+
+
+                }
+                else if ( (LA91_0==RULE_IDENT||LA91_0==RULE_LPAR||LA91_0==RULE_STRING||(LA91_0>=RULE_PLUS && LA91_0<=RULE_MINUS_EW)||(LA91_0>=RULE_UNSIGNED_INTEGER && LA91_0<=RULE_LBRACK)||LA91_0==RULE_LBRACE||LA91_0==50||LA91_0==69||LA91_0==73||LA91_0==78||LA91_0==81||LA91_0==84||(LA91_0>=88 && LA91_0<=90)) ) {
+                    alt91=1;
+                }
+
+
+                switch (alt91) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3968:2: (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3968:2: (lv_thenEquationClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3971:6: lv_thenEquationClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_rulewhen_clause_e9137);
+            	    lv_thenEquationClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getWhen_clause_eRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulewhen_clause_e9150); 
+            	     
+            	        createLeafNode(grammarAccess.getWhen_clause_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop91;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3993:3: (lv_elseWhenClauses_5= ruleelse_when_e )*
+            loop92:
+            do {
+                int alt92=2;
+                int LA92_0 = input.LA(1);
+
+                if ( (LA92_0==82) ) {
+                    alt92=1;
+                }
+
+
+                switch (alt92) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:3996:6: lv_elseWhenClauses_5= ruleelse_when_e
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_eAccess().getElseWhenClausesElse_when_eParserRuleCall_4_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleelse_when_e_in_rulewhen_clause_e9185);
+            	    lv_elseWhenClauses_5=ruleelse_when_e();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getWhen_clause_eRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "elseWhenClauses", lv_elseWhenClauses_5, "else_when_e", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop92;
+                }
+            } while (true);
+
+            match(input,48,FOLLOW_48_in_rulewhen_clause_e9199); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_eAccess().getEndKeyword_5(), null); 
+                
+            match(input,81,FOLLOW_81_in_rulewhen_clause_e9208); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_eAccess().getWhenKeyword_6(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulewhen_clause_e
+
+
+    // $ANTLR start entryRuleelse_when_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4029:1: entryRuleelse_when_e returns [EObject current=null] : iv_ruleelse_when_e= ruleelse_when_e EOF ;
+    public final EObject entryRuleelse_when_e() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleelse_when_e = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4029:53: (iv_ruleelse_when_e= ruleelse_when_e EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4030:2: iv_ruleelse_when_e= ruleelse_when_e EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElse_when_eRule(), currentNode); 
+            pushFollow(FOLLOW_ruleelse_when_e_in_entryRuleelse_when_e9241);
+            iv_ruleelse_when_e=ruleelse_when_e();
+            _fsp--;
+
+             current =iv_ruleelse_when_e; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleelse_when_e9251); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleelse_when_e
+
+
+    // $ANTLR start ruleelse_when_e
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4037:1: ruleelse_when_e returns [EObject current=null] : ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) ;
+    public final EObject ruleelse_when_e() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenEquationClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4042:6: ( ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4043:1: ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4043:1: ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4043:2: 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            {
+            match(input,82,FOLLOW_82_in_ruleelse_when_e9285); 
+
+                    createLeafNode(grammarAccess.getElse_when_eAccess().getElsewhenKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4047:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4050:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getElse_when_eAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_ruleelse_when_e9319);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElse_when_eRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_ruleelse_when_e9332); 
+
+                    createLeafNode(grammarAccess.getElse_when_eAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4072:1: ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop93:
+            do {
+                int alt93=2;
+                int LA93_0 = input.LA(1);
+
+                if ( (LA93_0==48) ) {
+                    int LA93_1 = input.LA(2);
+
+                    if ( (LA93_1==RULE_SEMICOLON||LA93_1==RULE_EQUALS||LA93_1==RULE_COLON||LA93_1==RULE_STRING||(LA93_1>=RULE_LESS && LA93_1<=RULE_POWER_EW)||(LA93_1>=86 && LA93_1<=87)||LA93_1==91) ) {
+                        alt93=1;
+                    }
+
+
+                }
+                else if ( (LA93_0==RULE_IDENT||LA93_0==RULE_LPAR||LA93_0==RULE_STRING||(LA93_0>=RULE_PLUS && LA93_0<=RULE_MINUS_EW)||(LA93_0>=RULE_UNSIGNED_INTEGER && LA93_0<=RULE_LBRACK)||LA93_0==RULE_LBRACE||LA93_0==50||LA93_0==69||LA93_0==73||LA93_0==78||LA93_0==81||LA93_0==84||(LA93_0>=88 && LA93_0<=90)) ) {
+                    alt93=1;
+                }
+
+
+                switch (alt93) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4072:2: (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4072:2: (lv_thenEquationClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4075:6: lv_thenEquationClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getElse_when_eAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_ruleelse_when_e9367);
+            	    lv_thenEquationClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getElse_when_eRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleelse_when_e9380); 
+            	     
+            	        createLeafNode(grammarAccess.getElse_when_eAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop93;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleelse_when_e
+
+
+    // $ANTLR start entryRulewhen_clause_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4104:1: entryRulewhen_clause_a returns [EObject current=null] : iv_rulewhen_clause_a= rulewhen_clause_a EOF ;
+    public final EObject entryRulewhen_clause_a() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulewhen_clause_a = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4104:55: (iv_rulewhen_clause_a= rulewhen_clause_a EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4105:2: iv_rulewhen_clause_a= rulewhen_clause_a EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getWhen_clause_aRule(), currentNode); 
+            pushFollow(FOLLOW_rulewhen_clause_a_in_entryRulewhen_clause_a9414);
+            iv_rulewhen_clause_a=rulewhen_clause_a();
+            _fsp--;
+
+             current =iv_rulewhen_clause_a; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulewhen_clause_a9424); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulewhen_clause_a
+
+
+    // $ANTLR start rulewhen_clause_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4112:1: rulewhen_clause_a returns [EObject current=null] : ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_a )* 'end' 'when' ) ;
+    public final EObject rulewhen_clause_a() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenAlgorithmClauses_3 = null;
+
+        EObject lv_elseWhenClauses_5 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4117:6: ( ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_a )* 'end' 'when' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4118:1: ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_a )* 'end' 'when' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4118:1: ( 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_a )* 'end' 'when' )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4118:2: 'when' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* (lv_elseWhenClauses_5= ruleelse_when_a )* 'end' 'when'
+            {
+            match(input,81,FOLLOW_81_in_rulewhen_clause_a9458); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_aAccess().getWhenKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4122:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4125:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_aAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_rulewhen_clause_a9492);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getWhen_clause_aRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_rulewhen_clause_a9505); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_aAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4147:1: ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop94:
+            do {
+                int alt94=2;
+                int LA94_0 = input.LA(1);
+
+                if ( (LA94_0==48) ) {
+                    int LA94_2 = input.LA(2);
+
+                    if ( (LA94_2==RULE_SEMICOLON||LA94_2==RULE_EQUALS||LA94_2==RULE_COLON||LA94_2==RULE_STRING||(LA94_2>=RULE_LESS && LA94_2<=RULE_POWER_EW)||(LA94_2>=86 && LA94_2<=87)||LA94_2==91) ) {
+                        alt94=1;
+                    }
+
+
+                }
+                else if ( (LA94_0==RULE_IDENT||LA94_0==RULE_LPAR||LA94_0==RULE_STRING||(LA94_0>=RULE_PLUS && LA94_0<=RULE_MINUS_EW)||(LA94_0>=RULE_UNSIGNED_INTEGER && LA94_0<=RULE_LBRACK)||LA94_0==RULE_LBRACE||LA94_0==50||LA94_0==69||LA94_0==73||LA94_0==78||LA94_0==81||LA94_0==84||(LA94_0>=88 && LA94_0<=90)) ) {
+                    alt94=1;
+                }
+
+
+                switch (alt94) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4147:2: (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4147:2: (lv_thenAlgorithmClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4150:6: lv_thenAlgorithmClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_aAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_rulewhen_clause_a9540);
+            	    lv_thenAlgorithmClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getWhen_clause_aRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulewhen_clause_a9553); 
+            	     
+            	        createLeafNode(grammarAccess.getWhen_clause_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop94;
+                }
+            } while (true);
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4172:3: (lv_elseWhenClauses_5= ruleelse_when_a )*
+            loop95:
+            do {
+                int alt95=2;
+                int LA95_0 = input.LA(1);
+
+                if ( (LA95_0==82) ) {
+                    alt95=1;
+                }
+
+
+                switch (alt95) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4175:6: lv_elseWhenClauses_5= ruleelse_when_a
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getWhen_clause_aAccess().getElseWhenClausesElse_when_aParserRuleCall_4_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleelse_when_a_in_rulewhen_clause_a9588);
+            	    lv_elseWhenClauses_5=ruleelse_when_a();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getWhen_clause_aRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "elseWhenClauses", lv_elseWhenClauses_5, "else_when_a", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop95;
+                }
+            } while (true);
+
+            match(input,48,FOLLOW_48_in_rulewhen_clause_a9602); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_aAccess().getEndKeyword_5(), null); 
+                
+            match(input,81,FOLLOW_81_in_rulewhen_clause_a9611); 
+
+                    createLeafNode(grammarAccess.getWhen_clause_aAccess().getWhenKeyword_6(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulewhen_clause_a
+
+
+    // $ANTLR start entryRuleelse_when_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4208:1: entryRuleelse_when_a returns [EObject current=null] : iv_ruleelse_when_a= ruleelse_when_a EOF ;
+    public final EObject entryRuleelse_when_a() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleelse_when_a = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4208:53: (iv_ruleelse_when_a= ruleelse_when_a EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4209:2: iv_ruleelse_when_a= ruleelse_when_a EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElse_when_aRule(), currentNode); 
+            pushFollow(FOLLOW_ruleelse_when_a_in_entryRuleelse_when_a9644);
+            iv_ruleelse_when_a=ruleelse_when_a();
+            _fsp--;
+
+             current =iv_ruleelse_when_a; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleelse_when_a9654); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleelse_when_a
+
+
+    // $ANTLR start ruleelse_when_a
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4216:1: ruleelse_when_a returns [EObject current=null] : ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) ;
+    public final EObject ruleelse_when_a() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenAlgorithmClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4221:6: ( ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4222:1: ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4222:1: ( 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4222:2: 'elsewhen' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            {
+            match(input,82,FOLLOW_82_in_ruleelse_when_a9688); 
+
+                    createLeafNode(grammarAccess.getElse_when_aAccess().getElsewhenKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4226:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4229:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getElse_when_aAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_ruleelse_when_a9722);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getElse_when_aRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_ruleelse_when_a9735); 
+
+                    createLeafNode(grammarAccess.getElse_when_aAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4251:1: ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop96:
+            do {
+                int alt96=2;
+                int LA96_0 = input.LA(1);
+
+                if ( (LA96_0==48) ) {
+                    int LA96_1 = input.LA(2);
+
+                    if ( (LA96_1==RULE_SEMICOLON||LA96_1==RULE_EQUALS||LA96_1==RULE_COLON||LA96_1==RULE_STRING||(LA96_1>=RULE_LESS && LA96_1<=RULE_POWER_EW)||(LA96_1>=86 && LA96_1<=87)||LA96_1==91) ) {
+                        alt96=1;
+                    }
+
+
+                }
+                else if ( (LA96_0==RULE_IDENT||LA96_0==RULE_LPAR||LA96_0==RULE_STRING||(LA96_0>=RULE_PLUS && LA96_0<=RULE_MINUS_EW)||(LA96_0>=RULE_UNSIGNED_INTEGER && LA96_0<=RULE_LBRACK)||LA96_0==RULE_LBRACE||LA96_0==50||LA96_0==69||LA96_0==73||LA96_0==78||LA96_0==81||LA96_0==84||(LA96_0>=88 && LA96_0<=90)) ) {
+                    alt96=1;
+                }
+
+
+                switch (alt96) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4251:2: (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4251:2: (lv_thenAlgorithmClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4254:6: lv_thenAlgorithmClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getElse_when_aAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_ruleelse_when_a9770);
+            	    lv_thenAlgorithmClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getElse_when_aRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleelse_when_a9783); 
+            	     
+            	        createLeafNode(grammarAccess.getElse_when_aAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop96;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleelse_when_a
+
+
+    // $ANTLR start entryRuleequation_rule_elseif
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4283:1: entryRuleequation_rule_elseif returns [EObject current=null] : iv_ruleequation_rule_elseif= ruleequation_rule_elseif EOF ;
+    public final EObject entryRuleequation_rule_elseif() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleequation_rule_elseif = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4283:62: (iv_ruleequation_rule_elseif= ruleequation_rule_elseif EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4284:2: iv_ruleequation_rule_elseif= ruleequation_rule_elseif EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getEquation_rule_elseifRule(), currentNode); 
+            pushFollow(FOLLOW_ruleequation_rule_elseif_in_entryRuleequation_rule_elseif9817);
+            iv_ruleequation_rule_elseif=ruleequation_rule_elseif();
+            _fsp--;
+
+             current =iv_ruleequation_rule_elseif; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleequation_rule_elseif9827); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleequation_rule_elseif
+
+
+    // $ANTLR start ruleequation_rule_elseif
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4291:1: ruleequation_rule_elseif returns [EObject current=null] : ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) ;
+    public final EObject ruleequation_rule_elseif() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenEquationClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4296:6: ( ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4297:1: ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4297:1: ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4297:2: 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            {
+            match(input,83,FOLLOW_83_in_ruleequation_rule_elseif9861); 
+
+                    createLeafNode(grammarAccess.getEquation_rule_elseifAccess().getElseifKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4301:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4304:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_elseifAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_ruleequation_rule_elseif9895);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getEquation_rule_elseifRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_ruleequation_rule_elseif9908); 
+
+                    createLeafNode(grammarAccess.getEquation_rule_elseifAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4326:1: ( (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop97:
+            do {
+                int alt97=2;
+                int LA97_0 = input.LA(1);
+
+                if ( (LA97_0==48) ) {
+                    int LA97_2 = input.LA(2);
+
+                    if ( (LA97_2==RULE_SEMICOLON||LA97_2==RULE_EQUALS||LA97_2==RULE_COLON||LA97_2==RULE_STRING||(LA97_2>=RULE_LESS && LA97_2<=RULE_POWER_EW)||(LA97_2>=86 && LA97_2<=87)||LA97_2==91) ) {
+                        alt97=1;
+                    }
+
+
+                }
+                else if ( (LA97_0==RULE_IDENT||LA97_0==RULE_LPAR||LA97_0==RULE_STRING||(LA97_0>=RULE_PLUS && LA97_0<=RULE_MINUS_EW)||(LA97_0>=RULE_UNSIGNED_INTEGER && LA97_0<=RULE_LBRACK)||LA97_0==RULE_LBRACE||LA97_0==50||LA97_0==69||LA97_0==73||LA97_0==78||LA97_0==81||LA97_0==84||(LA97_0>=88 && LA97_0<=90)) ) {
+                    alt97=1;
+                }
+
+
+                switch (alt97) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4326:2: (lv_thenEquationClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4326:2: (lv_thenEquationClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4329:6: lv_thenEquationClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getEquation_rule_elseifAccess().getThenEquationClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_ruleequation_rule_elseif9943);
+            	    lv_thenEquationClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getEquation_rule_elseifRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenEquationClauses", lv_thenEquationClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleequation_rule_elseif9956); 
+            	     
+            	        createLeafNode(grammarAccess.getEquation_rule_elseifAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop97;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleequation_rule_elseif
+
+
+    // $ANTLR start entryRulealgorithm_elseif
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4358:1: entryRulealgorithm_elseif returns [EObject current=null] : iv_rulealgorithm_elseif= rulealgorithm_elseif EOF ;
+    public final EObject entryRulealgorithm_elseif() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulealgorithm_elseif = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4358:58: (iv_rulealgorithm_elseif= rulealgorithm_elseif EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4359:2: iv_rulealgorithm_elseif= rulealgorithm_elseif EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getAlgorithm_elseifRule(), currentNode); 
+            pushFollow(FOLLOW_rulealgorithm_elseif_in_entryRulealgorithm_elseif9990);
+            iv_rulealgorithm_elseif=rulealgorithm_elseif();
+            _fsp--;
+
+             current =iv_rulealgorithm_elseif; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulealgorithm_elseif10000); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulealgorithm_elseif
+
+
+    // $ANTLR start rulealgorithm_elseif
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4366:1: rulealgorithm_elseif returns [EObject current=null] : ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) ;
+    public final EObject rulealgorithm_elseif() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_condition_1 = null;
+
+        EObject lv_thenAlgorithmClauses_3 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4371:6: ( ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4372:1: ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4372:1: ( 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4372:2: 'elseif' (lv_condition_1= ruleexpression ) 'then' ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            {
+            match(input,83,FOLLOW_83_in_rulealgorithm_elseif10034); 
+
+                    createLeafNode(grammarAccess.getAlgorithm_elseifAccess().getElseifKeyword_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4376:1: (lv_condition_1= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4379:6: lv_condition_1= ruleexpression
+            {
+             
+            	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_elseifAccess().getConditionExpressionParserRuleCall_1_0(), currentNode); 
+            	    
+            pushFollow(FOLLOW_ruleexpression_in_rulealgorithm_elseif10068);
+            lv_condition_1=ruleexpression();
+            _fsp--;
+
+
+            	        if (current==null) {
+            	            current = factory.create(grammarAccess.getAlgorithm_elseifRule().getType().getClassifier());
+            	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	        }
+            	        
+            	        try {
+            	       		set(current, "condition", lv_condition_1, "expression", currentNode);
+            	        } catch (ValueConverterException vce) {
+            				handleValueConverterException(vce);
+            	        }
+            	        currentNode = currentNode.getParent();
+            	    
+
+            }
+
+            match(input,76,FOLLOW_76_in_rulealgorithm_elseif10081); 
+
+                    createLeafNode(grammarAccess.getAlgorithm_elseifAccess().getThenKeyword_2(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4401:1: ( (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON )*
+            loop98:
+            do {
+                int alt98=2;
+                int LA98_0 = input.LA(1);
+
+                if ( (LA98_0==48) ) {
+                    int LA98_2 = input.LA(2);
+
+                    if ( (LA98_2==RULE_SEMICOLON||LA98_2==RULE_EQUALS||LA98_2==RULE_COLON||LA98_2==RULE_STRING||(LA98_2>=RULE_LESS && LA98_2<=RULE_POWER_EW)||(LA98_2>=86 && LA98_2<=87)||LA98_2==91) ) {
+                        alt98=1;
+                    }
+
+
+                }
+                else if ( (LA98_0==RULE_IDENT||LA98_0==RULE_LPAR||LA98_0==RULE_STRING||(LA98_0>=RULE_PLUS && LA98_0<=RULE_MINUS_EW)||(LA98_0>=RULE_UNSIGNED_INTEGER && LA98_0<=RULE_LBRACK)||LA98_0==RULE_LBRACE||LA98_0==50||LA98_0==69||LA98_0==73||LA98_0==78||LA98_0==81||LA98_0==84||(LA98_0>=88 && LA98_0<=90)) ) {
+                    alt98=1;
+                }
+
+
+                switch (alt98) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4401:2: (lv_thenAlgorithmClauses_3= ruleequation_rule ) RULE_SEMICOLON
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4401:2: (lv_thenAlgorithmClauses_3= ruleequation_rule )
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4404:6: lv_thenAlgorithmClauses_3= ruleequation_rule
+            	    {
+            	     
+            	    	        currentNode=createCompositeNode(grammarAccess.getAlgorithm_elseifAccess().getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0(), currentNode); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleequation_rule_in_rulealgorithm_elseif10116);
+            	    lv_thenAlgorithmClauses_3=ruleequation_rule();
+            	    _fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = factory.create(grammarAccess.getAlgorithm_elseifRule().getType().getClassifier());
+            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
+            	    	        }
+            	    	        
+            	    	        try {
+            	    	       		add(current, "thenAlgorithmClauses", lv_thenAlgorithmClauses_3, "equation_rule", currentNode);
+            	    	        } catch (ValueConverterException vce) {
+            	    				handleValueConverterException(vce);
+            	    	        }
+            	    	        currentNode = currentNode.getParent();
+            	    	    
+
+            	    }
+
+            	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_rulealgorithm_elseif10129); 
+            	     
+            	        createLeafNode(grammarAccess.getAlgorithm_elseifAccess().getSEMICOLONTerminalRuleCall_3_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop98;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulealgorithm_elseif
+
+
+    // $ANTLR start entryRuleconnect_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4433:1: entryRuleconnect_clause returns [String current=null] : iv_ruleconnect_clause= ruleconnect_clause EOF ;
+    public final String entryRuleconnect_clause() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleconnect_clause = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4433:55: (iv_ruleconnect_clause= ruleconnect_clause EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4434:2: iv_ruleconnect_clause= ruleconnect_clause EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConnect_clauseRule(), currentNode); 
+            pushFollow(FOLLOW_ruleconnect_clause_in_entryRuleconnect_clause10164);
+            iv_ruleconnect_clause=ruleconnect_clause();
+            _fsp--;
+
+             current =iv_ruleconnect_clause.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleconnect_clause10175); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleconnect_clause
+
+
+    // $ANTLR start ruleconnect_clause
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4441:1: ruleconnect_clause returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'connect' this_LPAR_1= RULE_LPAR this_connector_ref_2= ruleconnector_ref this_COMMA_3= RULE_COMMA this_connector_ref_4= ruleconnector_ref this_RPAR_5= RULE_RPAR ) ;
+    public final AntlrDatatypeRuleToken ruleconnect_clause() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        Token this_LPAR_1=null;
+        Token this_COMMA_3=null;
+        Token this_RPAR_5=null;
+        AntlrDatatypeRuleToken this_connector_ref_2 = null;
+
+        AntlrDatatypeRuleToken this_connector_ref_4 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4447:6: ( (kw= 'connect' this_LPAR_1= RULE_LPAR this_connector_ref_2= ruleconnector_ref this_COMMA_3= RULE_COMMA this_connector_ref_4= ruleconnector_ref this_RPAR_5= RULE_RPAR ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4448:1: (kw= 'connect' this_LPAR_1= RULE_LPAR this_connector_ref_2= ruleconnector_ref this_COMMA_3= RULE_COMMA this_connector_ref_4= ruleconnector_ref this_RPAR_5= RULE_RPAR )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4448:1: (kw= 'connect' this_LPAR_1= RULE_LPAR this_connector_ref_2= ruleconnector_ref this_COMMA_3= RULE_COMMA this_connector_ref_4= ruleconnector_ref this_RPAR_5= RULE_RPAR )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4449:2: kw= 'connect' this_LPAR_1= RULE_LPAR this_connector_ref_2= ruleconnector_ref this_COMMA_3= RULE_COMMA this_connector_ref_4= ruleconnector_ref this_RPAR_5= RULE_RPAR
+            {
+            kw=(Token)input.LT(1);
+            match(input,84,FOLLOW_84_in_ruleconnect_clause10213); 
+
+                    current.merge(kw);
+                    createLeafNode(grammarAccess.getConnect_clauseAccess().getConnectKeyword_0(), null); 
+                
+            this_LPAR_1=(Token)input.LT(1);
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_ruleconnect_clause10228); 
+
+            		current.merge(this_LPAR_1);
+                
+             
+                createLeafNode(grammarAccess.getConnect_clauseAccess().getLPARTerminalRuleCall_1(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getConnect_clauseAccess().getConnector_refParserRuleCall_2(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleconnector_ref_in_ruleconnect_clause10255);
+            this_connector_ref_2=ruleconnector_ref();
+            _fsp--;
+
+
+            		current.merge(this_connector_ref_2);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            this_COMMA_3=(Token)input.LT(1);
+            match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_ruleconnect_clause10275); 
+
+            		current.merge(this_COMMA_3);
+                
+             
+                createLeafNode(grammarAccess.getConnect_clauseAccess().getCOMMATerminalRuleCall_3(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getConnect_clauseAccess().getConnector_refParserRuleCall_4(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleconnector_ref_in_ruleconnect_clause10302);
+            this_connector_ref_4=ruleconnector_ref();
+            _fsp--;
+
+
+            		current.merge(this_connector_ref_4);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            this_RPAR_5=(Token)input.LT(1);
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_ruleconnect_clause10322); 
+
+            		current.merge(this_RPAR_5);
+                
+             
+                createLeafNode(grammarAccess.getConnect_clauseAccess().getRPARTerminalRuleCall_5(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleconnect_clause
+
+
+    // $ANTLR start entryRuleconnector_ref
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4505:1: entryRuleconnector_ref returns [String current=null] : iv_ruleconnector_ref= ruleconnector_ref EOF ;
+    public final String entryRuleconnector_ref() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleconnector_ref = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4505:54: (iv_ruleconnector_ref= ruleconnector_ref EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4506:2: iv_ruleconnector_ref= ruleconnector_ref EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConnector_refRule(), currentNode); 
+            pushFollow(FOLLOW_ruleconnector_ref_in_entryRuleconnector_ref10366);
+            iv_ruleconnector_ref=ruleconnector_ref();
+            _fsp--;
+
+             current =iv_ruleconnector_ref.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleconnector_ref10377); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleconnector_ref
+
+
+    // $ANTLR start ruleconnector_ref
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4513:1: ruleconnector_ref returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2 )? ) ;
+    public final AntlrDatatypeRuleToken ruleconnector_ref() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token this_DOT_2=null;
+        AntlrDatatypeRuleToken this_array_subscripts_1 = null;
+
+        AntlrDatatypeRuleToken this_connector_ref_2_3 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4519:6: ( (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2 )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4520:1: (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2 )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4520:1: (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2 )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4520:6: this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2 )?
+            {
+            this_IDENT_0=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleconnector_ref10417); 
+
+            		current.merge(this_IDENT_0);
+                
+             
+                createLeafNode(grammarAccess.getConnector_refAccess().getIDENTTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4527:1: (this_array_subscripts_1= rulearray_subscripts )?
+            int alt99=2;
+            int LA99_0 = input.LA(1);
+
+            if ( (LA99_0==RULE_LBRACK) ) {
+                alt99=1;
+            }
+            switch (alt99) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4528:5: this_array_subscripts_1= rulearray_subscripts
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConnector_refAccess().getArray_subscriptsParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulearray_subscripts_in_ruleconnector_ref10445);
+                    this_array_subscripts_1=rulearray_subscripts();
+                    _fsp--;
+
+
+                    		current.merge(this_array_subscripts_1);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4538:3: (this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2 )?
+            int alt100=2;
+            int LA100_0 = input.LA(1);
+
+            if ( (LA100_0==RULE_DOT) ) {
+                alt100=1;
+            }
+            switch (alt100) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4538:8: this_DOT_2= RULE_DOT this_connector_ref_2_3= ruleconnector_ref_2
+                    {
+                    this_DOT_2=(Token)input.LT(1);
+                    match(input,RULE_DOT,FOLLOW_RULE_DOT_in_ruleconnector_ref10468); 
+
+                    		current.merge(this_DOT_2);
+                        
+                     
+                        createLeafNode(grammarAccess.getConnector_refAccess().getDOTTerminalRuleCall_2_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConnector_refAccess().getConnector_ref_2ParserRuleCall_2_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleconnector_ref_2_in_ruleconnector_ref10495);
+                    this_connector_ref_2_3=ruleconnector_ref_2();
+                    _fsp--;
+
+
+                    		current.merge(this_connector_ref_2_3);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleconnector_ref
+
+
+    // $ANTLR start entryRuleconnector_ref_2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4564:1: entryRuleconnector_ref_2 returns [String current=null] : iv_ruleconnector_ref_2= ruleconnector_ref_2 EOF ;
+    public final String entryRuleconnector_ref_2() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleconnector_ref_2 = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4564:56: (iv_ruleconnector_ref_2= ruleconnector_ref_2 EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4565:2: iv_ruleconnector_ref_2= ruleconnector_ref_2 EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getConnector_ref_2Rule(), currentNode); 
+            pushFollow(FOLLOW_ruleconnector_ref_2_in_entryRuleconnector_ref_210541);
+            iv_ruleconnector_ref_2=ruleconnector_ref_2();
+            _fsp--;
+
+             current =iv_ruleconnector_ref_2.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleconnector_ref_210552); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleconnector_ref_2
+
+
+    // $ANTLR start ruleconnector_ref_2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4572:1: ruleconnector_ref_2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? ) ;
+    public final AntlrDatatypeRuleToken ruleconnector_ref_2() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        AntlrDatatypeRuleToken this_array_subscripts_1 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4578:6: ( (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4579:1: (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4579:1: (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4579:6: this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )?
+            {
+            this_IDENT_0=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_ruleconnector_ref_210592); 
+
+            		current.merge(this_IDENT_0);
+                
+             
+                createLeafNode(grammarAccess.getConnector_ref_2Access().getIDENTTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4586:1: (this_array_subscripts_1= rulearray_subscripts )?
+            int alt101=2;
+            int LA101_0 = input.LA(1);
+
+            if ( (LA101_0==RULE_LBRACK) ) {
+                alt101=1;
+            }
+            switch (alt101) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4587:5: this_array_subscripts_1= rulearray_subscripts
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getConnector_ref_2Access().getArray_subscriptsParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulearray_subscripts_in_ruleconnector_ref_210620);
+                    this_array_subscripts_1=rulearray_subscripts();
+                    _fsp--;
+
+
+                    		current.merge(this_array_subscripts_1);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleconnector_ref_2
+
+
+    // $ANTLR start entryRuleexpression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4605:1: entryRuleexpression returns [String current=null] : iv_ruleexpression= ruleexpression EOF ;
+    public final String entryRuleexpression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleexpression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4605:51: (iv_ruleexpression= ruleexpression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4606:2: iv_ruleexpression= ruleexpression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getExpressionRule(), currentNode); 
+            pushFollow(FOLLOW_ruleexpression_in_entryRuleexpression10666);
+            iv_ruleexpression=ruleexpression();
+            _fsp--;
+
+             current =iv_ruleexpression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleexpression10677); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleexpression
+
+
+    // $ANTLR start ruleexpression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4613:1: ruleexpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_if_expression_0= ruleif_expression | this_simple_expression_1= rulesimple_expression ) ;
+    public final AntlrDatatypeRuleToken ruleexpression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        AntlrDatatypeRuleToken this_if_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_simple_expression_1 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4619:6: ( (this_if_expression_0= ruleif_expression | this_simple_expression_1= rulesimple_expression ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4620:1: (this_if_expression_0= ruleif_expression | this_simple_expression_1= rulesimple_expression )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4620:1: (this_if_expression_0= ruleif_expression | this_simple_expression_1= rulesimple_expression )
+            int alt102=2;
+            int LA102_0 = input.LA(1);
+
+            if ( (LA102_0==69) ) {
+                alt102=1;
+            }
+            else if ( (LA102_0==RULE_IDENT||LA102_0==RULE_LPAR||LA102_0==RULE_STRING||(LA102_0>=RULE_PLUS && LA102_0<=RULE_MINUS_EW)||(LA102_0>=RULE_UNSIGNED_INTEGER && LA102_0<=RULE_LBRACK)||LA102_0==RULE_LBRACE||LA102_0==48||LA102_0==50||LA102_0==73||(LA102_0>=88 && LA102_0<=90)) ) {
+                alt102=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("4620:1: (this_if_expression_0= ruleif_expression | this_simple_expression_1= rulesimple_expression )", 102, 0, input);
+
+                throw nvae;
+            }
+            switch (alt102) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4621:5: this_if_expression_0= ruleif_expression
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getExpressionAccess().getIf_expressionParserRuleCall_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleif_expression_in_ruleexpression10724);
+                    this_if_expression_0=ruleif_expression();
+                    _fsp--;
+
+
+                    		current.merge(this_if_expression_0);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4633:5: this_simple_expression_1= rulesimple_expression
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getExpressionAccess().getSimple_expressionParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulesimple_expression_in_ruleexpression10757);
+                    this_simple_expression_1=rulesimple_expression();
+                    _fsp--;
+
+
+                    		current.merge(this_simple_expression_1);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleexpression
+
+
+    // $ANTLR start entryRuleif_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4653:1: entryRuleif_expression returns [String current=null] : iv_ruleif_expression= ruleif_expression EOF ;
+    public final String entryRuleif_expression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleif_expression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4653:54: (iv_ruleif_expression= ruleif_expression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4654:2: iv_ruleif_expression= ruleif_expression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getIf_expressionRule(), currentNode); 
+            pushFollow(FOLLOW_ruleif_expression_in_entryRuleif_expression10803);
+            iv_ruleif_expression=ruleif_expression();
+            _fsp--;
+
+             current =iv_ruleif_expression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleif_expression10814); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleif_expression
+
+
+    // $ANTLR start ruleif_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4661:1: ruleif_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'if' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression (this_elseif_expression_4= ruleelseif_expression )* kw= 'else' this_expression_6= ruleexpression ) ;
+    public final AntlrDatatypeRuleToken ruleif_expression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        AntlrDatatypeRuleToken this_expression_1 = null;
+
+        AntlrDatatypeRuleToken this_expression_3 = null;
+
+        AntlrDatatypeRuleToken this_elseif_expression_4 = null;
+
+        AntlrDatatypeRuleToken this_expression_6 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4667:6: ( (kw= 'if' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression (this_elseif_expression_4= ruleelseif_expression )* kw= 'else' this_expression_6= ruleexpression ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4668:1: (kw= 'if' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression (this_elseif_expression_4= ruleelseif_expression )* kw= 'else' this_expression_6= ruleexpression )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4668:1: (kw= 'if' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression (this_elseif_expression_4= ruleelseif_expression )* kw= 'else' this_expression_6= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4669:2: kw= 'if' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression (this_elseif_expression_4= ruleelseif_expression )* kw= 'else' this_expression_6= ruleexpression
+            {
+            kw=(Token)input.LT(1);
+            match(input,69,FOLLOW_69_in_ruleif_expression10852); 
+
+                    current.merge(kw);
+                    createLeafNode(grammarAccess.getIf_expressionAccess().getIfKeyword_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getExpressionParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleif_expression10874);
+            this_expression_1=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_1);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            kw=(Token)input.LT(1);
+            match(input,76,FOLLOW_76_in_ruleif_expression10892); 
+
+                    current.merge(kw);
+                    createLeafNode(grammarAccess.getIf_expressionAccess().getThenKeyword_2(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getExpressionParserRuleCall_3(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleif_expression10914);
+            this_expression_3=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_3);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4702:1: (this_elseif_expression_4= ruleelseif_expression )*
+            loop103:
+            do {
+                int alt103=2;
+                int LA103_0 = input.LA(1);
+
+                if ( (LA103_0==83) ) {
+                    alt103=1;
+                }
+
+
+                switch (alt103) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4703:5: this_elseif_expression_4= ruleelseif_expression
+            	    {
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getElseif_expressionParserRuleCall_4(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_ruleelseif_expression_in_ruleif_expression10942);
+            	    this_elseif_expression_4=ruleelseif_expression();
+            	    _fsp--;
+
+
+            	    		current.merge(this_elseif_expression_4);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop103;
+                }
+            } while (true);
+
+            kw=(Token)input.LT(1);
+            match(input,77,FOLLOW_77_in_ruleif_expression10962); 
+
+                    current.merge(kw);
+                    createLeafNode(grammarAccess.getIf_expressionAccess().getElseKeyword_5(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getIf_expressionAccess().getExpressionParserRuleCall_6(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleif_expression10984);
+            this_expression_6=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_6);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleif_expression
+
+
+    // $ANTLR start entryRuleelseif_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4738:1: entryRuleelseif_expression returns [String current=null] : iv_ruleelseif_expression= ruleelseif_expression EOF ;
+    public final String entryRuleelseif_expression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleelseif_expression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4738:58: (iv_ruleelseif_expression= ruleelseif_expression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4739:2: iv_ruleelseif_expression= ruleelseif_expression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getElseif_expressionRule(), currentNode); 
+            pushFollow(FOLLOW_ruleelseif_expression_in_entryRuleelseif_expression11028);
+            iv_ruleelseif_expression=ruleelseif_expression();
+            _fsp--;
+
+             current =iv_ruleelseif_expression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleelseif_expression11039); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleelseif_expression
+
+
+    // $ANTLR start ruleelseif_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4746:1: ruleelseif_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'elseif' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression ) ;
+    public final AntlrDatatypeRuleToken ruleelseif_expression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        AntlrDatatypeRuleToken this_expression_1 = null;
+
+        AntlrDatatypeRuleToken this_expression_3 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4752:6: ( (kw= 'elseif' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4753:1: (kw= 'elseif' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4753:1: (kw= 'elseif' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4754:2: kw= 'elseif' this_expression_1= ruleexpression kw= 'then' this_expression_3= ruleexpression
+            {
+            kw=(Token)input.LT(1);
+            match(input,83,FOLLOW_83_in_ruleelseif_expression11077); 
+
+                    current.merge(kw);
+                    createLeafNode(grammarAccess.getElseif_expressionAccess().getElseifKeyword_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getElseif_expressionAccess().getExpressionParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleelseif_expression11099);
+            this_expression_1=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_1);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            kw=(Token)input.LT(1);
+            match(input,76,FOLLOW_76_in_ruleelseif_expression11117); 
+
+                    current.merge(kw);
+                    createLeafNode(grammarAccess.getElseif_expressionAccess().getThenKeyword_2(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getElseif_expressionAccess().getExpressionParserRuleCall_3(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleelseif_expression11139);
+            this_expression_3=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_3);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleelseif_expression
+
+
+    // $ANTLR start entryRulefor_indices
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4795:1: entryRulefor_indices returns [String current=null] : iv_rulefor_indices= rulefor_indices EOF ;
+    public final String entryRulefor_indices() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefor_indices = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4795:52: (iv_rulefor_indices= rulefor_indices EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4796:2: iv_rulefor_indices= rulefor_indices EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFor_indicesRule(), currentNode); 
+            pushFollow(FOLLOW_rulefor_indices_in_entryRulefor_indices11183);
+            iv_rulefor_indices=rulefor_indices();
+            _fsp--;
+
+             current =iv_rulefor_indices.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefor_indices11194); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefor_indices
+
+
+    // $ANTLR start rulefor_indices
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4803:1: rulefor_indices returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_for_index_0= rulefor_index (this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index )* ) ;
+    public final AntlrDatatypeRuleToken rulefor_indices() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COMMA_1=null;
+        AntlrDatatypeRuleToken this_for_index_0 = null;
+
+        AntlrDatatypeRuleToken this_for_index_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4809:6: ( (this_for_index_0= rulefor_index (this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4810:1: (this_for_index_0= rulefor_index (this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4810:1: (this_for_index_0= rulefor_index (this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4811:5: this_for_index_0= rulefor_index (this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getFor_indicesAccess().getFor_indexParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulefor_index_in_rulefor_indices11241);
+            this_for_index_0=rulefor_index();
+            _fsp--;
+
+
+            		current.merge(this_for_index_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4821:1: (this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index )*
+            loop104:
+            do {
+                int alt104=2;
+                int LA104_0 = input.LA(1);
+
+                if ( (LA104_0==RULE_COMMA) ) {
+                    alt104=1;
+                }
+
+
+                switch (alt104) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4821:6: this_COMMA_1= RULE_COMMA this_for_index_2= rulefor_index
+            	    {
+            	    this_COMMA_1=(Token)input.LT(1);
+            	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulefor_indices11262); 
+
+            	    		current.merge(this_COMMA_1);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getFor_indicesAccess().getCOMMATerminalRuleCall_1_0(), null); 
+            	        
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getFor_indicesAccess().getFor_indexParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulefor_index_in_rulefor_indices11289);
+            	    this_for_index_2=rulefor_index();
+            	    _fsp--;
+
+
+            	    		current.merge(this_for_index_2);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop104;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefor_indices
+
+
+    // $ANTLR start entryRulefor_index
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4847:1: entryRulefor_index returns [String current=null] : iv_rulefor_index= rulefor_index EOF ;
+    public final String entryRulefor_index() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefor_index = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4847:50: (iv_rulefor_index= rulefor_index EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4848:2: iv_rulefor_index= rulefor_index EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFor_indexRule(), currentNode); 
+            pushFollow(FOLLOW_rulefor_index_in_entryRulefor_index11335);
+            iv_rulefor_index=rulefor_index();
+            _fsp--;
+
+             current =iv_rulefor_index.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefor_index11346); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefor_index
+
+
+    // $ANTLR start rulefor_index
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4855:1: rulefor_index returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT (kw= 'in' this_expression_2= ruleexpression )? ) ;
+    public final AntlrDatatypeRuleToken rulefor_index() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token kw=null;
+        AntlrDatatypeRuleToken this_expression_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4861:6: ( (this_IDENT_0= RULE_IDENT (kw= 'in' this_expression_2= ruleexpression )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4862:1: (this_IDENT_0= RULE_IDENT (kw= 'in' this_expression_2= ruleexpression )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4862:1: (this_IDENT_0= RULE_IDENT (kw= 'in' this_expression_2= ruleexpression )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4862:6: this_IDENT_0= RULE_IDENT (kw= 'in' this_expression_2= ruleexpression )?
+            {
+            this_IDENT_0=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulefor_index11386); 
+
+            		current.merge(this_IDENT_0);
+                
+             
+                createLeafNode(grammarAccess.getFor_indexAccess().getIDENTTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4869:1: (kw= 'in' this_expression_2= ruleexpression )?
+            int alt105=2;
+            int LA105_0 = input.LA(1);
+
+            if ( (LA105_0==85) ) {
+                alt105=1;
+            }
+            switch (alt105) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4870:2: kw= 'in' this_expression_2= ruleexpression
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,85,FOLLOW_85_in_rulefor_index11405); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getFor_indexAccess().getInKeyword_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getFor_indexAccess().getExpressionParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_in_rulefor_index11427);
+                    this_expression_2=ruleexpression();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_2);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefor_index
+
+
+    // $ANTLR start entryRulesimple_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4894:1: entryRulesimple_expression returns [String current=null] : iv_rulesimple_expression= rulesimple_expression EOF ;
+    public final String entryRulesimple_expression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulesimple_expression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4894:58: (iv_rulesimple_expression= rulesimple_expression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4895:2: iv_rulesimple_expression= rulesimple_expression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getSimple_expressionRule(), currentNode); 
+            pushFollow(FOLLOW_rulesimple_expression_in_entryRulesimple_expression11473);
+            iv_rulesimple_expression=rulesimple_expression();
+            _fsp--;
+
+             current =iv_rulesimple_expression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulesimple_expression11484); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulesimple_expression
+
+
+    // $ANTLR start rulesimple_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4902:1: rulesimple_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_simple_expr_0= rulesimple_expr ;
+    public final AntlrDatatypeRuleToken rulesimple_expression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        AntlrDatatypeRuleToken this_simple_expr_0 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4908:6: (this_simple_expr_0= rulesimple_expr )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4910:5: this_simple_expr_0= rulesimple_expr
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getSimple_expressionAccess().getSimple_exprParserRuleCall(), currentNode); 
+                
+            pushFollow(FOLLOW_rulesimple_expr_in_rulesimple_expression11530);
+            this_simple_expr_0=rulesimple_expr();
+            _fsp--;
+
+
+            		current.merge(this_simple_expr_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulesimple_expression
+
+
+    // $ANTLR start entryRulesimple_expr
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4928:1: entryRulesimple_expr returns [String current=null] : iv_rulesimple_expr= rulesimple_expr EOF ;
+    public final String entryRulesimple_expr() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulesimple_expr = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4928:52: (iv_rulesimple_expr= rulesimple_expr EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4929:2: iv_rulesimple_expr= rulesimple_expr EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getSimple_exprRule(), currentNode); 
+            pushFollow(FOLLOW_rulesimple_expr_in_entryRulesimple_expr11573);
+            iv_rulesimple_expr=rulesimple_expr();
+            _fsp--;
+
+             current =iv_rulesimple_expr.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulesimple_expr11584); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulesimple_expr
+
+
+    // $ANTLR start rulesimple_expr
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4936:1: rulesimple_expr returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_logical_expression_0= rulelogical_expression (this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )? )? ) ;
+    public final AntlrDatatypeRuleToken rulesimple_expr() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COLON_1=null;
+        Token this_COLON_3=null;
+        AntlrDatatypeRuleToken this_logical_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_logical_expression_2 = null;
+
+        AntlrDatatypeRuleToken this_logical_expression_4 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4942:6: ( (this_logical_expression_0= rulelogical_expression (this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )? )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4943:1: (this_logical_expression_0= rulelogical_expression (this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )? )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4943:1: (this_logical_expression_0= rulelogical_expression (this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )? )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4944:5: this_logical_expression_0= rulelogical_expression (this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )? )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getSimple_exprAccess().getLogical_expressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulelogical_expression_in_rulesimple_expr11631);
+            this_logical_expression_0=rulelogical_expression();
+            _fsp--;
+
+
+            		current.merge(this_logical_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4954:1: (this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )? )?
+            int alt107=2;
+            int LA107_0 = input.LA(1);
+
+            if ( (LA107_0==RULE_COLON) ) {
+                alt107=1;
+            }
+            switch (alt107) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4954:6: this_COLON_1= RULE_COLON this_logical_expression_2= rulelogical_expression (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )?
+                    {
+                    this_COLON_1=(Token)input.LT(1);
+                    match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rulesimple_expr11652); 
+
+                    		current.merge(this_COLON_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getSimple_exprAccess().getCOLONTerminalRuleCall_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getSimple_exprAccess().getLogical_expressionParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulelogical_expression_in_rulesimple_expr11679);
+                    this_logical_expression_2=rulelogical_expression();
+                    _fsp--;
+
+
+                    		current.merge(this_logical_expression_2);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4972:1: (this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression )?
+                    int alt106=2;
+                    int LA106_0 = input.LA(1);
+
+                    if ( (LA106_0==RULE_COLON) ) {
+                        alt106=1;
+                    }
+                    switch (alt106) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4972:6: this_COLON_3= RULE_COLON this_logical_expression_4= rulelogical_expression
+                            {
+                            this_COLON_3=(Token)input.LT(1);
+                            match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rulesimple_expr11700); 
+
+                            		current.merge(this_COLON_3);
+                                
+                             
+                                createLeafNode(grammarAccess.getSimple_exprAccess().getCOLONTerminalRuleCall_1_2_0(), null); 
+                                
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getSimple_exprAccess().getLogical_expressionParserRuleCall_1_2_1(), currentNode); 
+                                
+                            pushFollow(FOLLOW_rulelogical_expression_in_rulesimple_expr11727);
+                            this_logical_expression_4=rulelogical_expression();
+                            _fsp--;
+
+
+                            		current.merge(this_logical_expression_4);
+                                
+                             
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulesimple_expr
+
+
+    // $ANTLR start entryRulelogical_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4998:1: entryRulelogical_expression returns [String current=null] : iv_rulelogical_expression= rulelogical_expression EOF ;
+    public final String entryRulelogical_expression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulelogical_expression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4998:59: (iv_rulelogical_expression= rulelogical_expression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:4999:2: iv_rulelogical_expression= rulelogical_expression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getLogical_expressionRule(), currentNode); 
+            pushFollow(FOLLOW_rulelogical_expression_in_entryRulelogical_expression11775);
+            iv_rulelogical_expression=rulelogical_expression();
+            _fsp--;
+
+             current =iv_rulelogical_expression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulelogical_expression11786); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulelogical_expression
+
+
+    // $ANTLR start rulelogical_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5006:1: rulelogical_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_logical_term_0= rulelogical_term (kw= 'or' this_logical_term_2= rulelogical_term )* ) ;
+    public final AntlrDatatypeRuleToken rulelogical_expression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        AntlrDatatypeRuleToken this_logical_term_0 = null;
+
+        AntlrDatatypeRuleToken this_logical_term_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5012:6: ( (this_logical_term_0= rulelogical_term (kw= 'or' this_logical_term_2= rulelogical_term )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5013:1: (this_logical_term_0= rulelogical_term (kw= 'or' this_logical_term_2= rulelogical_term )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5013:1: (this_logical_term_0= rulelogical_term (kw= 'or' this_logical_term_2= rulelogical_term )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5014:5: this_logical_term_0= rulelogical_term (kw= 'or' this_logical_term_2= rulelogical_term )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getLogical_expressionAccess().getLogical_termParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulelogical_term_in_rulelogical_expression11833);
+            this_logical_term_0=rulelogical_term();
+            _fsp--;
+
+
+            		current.merge(this_logical_term_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5024:1: (kw= 'or' this_logical_term_2= rulelogical_term )*
+            loop108:
+            do {
+                int alt108=2;
+                int LA108_0 = input.LA(1);
+
+                if ( (LA108_0==86) ) {
+                    alt108=1;
+                }
+
+
+                switch (alt108) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5025:2: kw= 'or' this_logical_term_2= rulelogical_term
+            	    {
+            	    kw=(Token)input.LT(1);
+            	    match(input,86,FOLLOW_86_in_rulelogical_expression11852); 
+
+            	            current.merge(kw);
+            	            createLeafNode(grammarAccess.getLogical_expressionAccess().getOrKeyword_1_0(), null); 
+            	        
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getLogical_expressionAccess().getLogical_termParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulelogical_term_in_rulelogical_expression11874);
+            	    this_logical_term_2=rulelogical_term();
+            	    _fsp--;
+
+
+            	    		current.merge(this_logical_term_2);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop108;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulelogical_expression
+
+
+    // $ANTLR start entryRulelogical_term
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5049:1: entryRulelogical_term returns [String current=null] : iv_rulelogical_term= rulelogical_term EOF ;
+    public final String entryRulelogical_term() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulelogical_term = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5049:53: (iv_rulelogical_term= rulelogical_term EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5050:2: iv_rulelogical_term= rulelogical_term EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getLogical_termRule(), currentNode); 
+            pushFollow(FOLLOW_rulelogical_term_in_entryRulelogical_term11920);
+            iv_rulelogical_term=rulelogical_term();
+            _fsp--;
+
+             current =iv_rulelogical_term.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulelogical_term11931); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulelogical_term
+
+
+    // $ANTLR start rulelogical_term
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5057:1: rulelogical_term returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_logical_factor_0= rulelogical_factor (kw= 'and' this_logical_factor_2= rulelogical_factor )* ) ;
+    public final AntlrDatatypeRuleToken rulelogical_term() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        AntlrDatatypeRuleToken this_logical_factor_0 = null;
+
+        AntlrDatatypeRuleToken this_logical_factor_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5063:6: ( (this_logical_factor_0= rulelogical_factor (kw= 'and' this_logical_factor_2= rulelogical_factor )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5064:1: (this_logical_factor_0= rulelogical_factor (kw= 'and' this_logical_factor_2= rulelogical_factor )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5064:1: (this_logical_factor_0= rulelogical_factor (kw= 'and' this_logical_factor_2= rulelogical_factor )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5065:5: this_logical_factor_0= rulelogical_factor (kw= 'and' this_logical_factor_2= rulelogical_factor )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getLogical_termAccess().getLogical_factorParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulelogical_factor_in_rulelogical_term11978);
+            this_logical_factor_0=rulelogical_factor();
+            _fsp--;
+
+
+            		current.merge(this_logical_factor_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5075:1: (kw= 'and' this_logical_factor_2= rulelogical_factor )*
+            loop109:
+            do {
+                int alt109=2;
+                int LA109_0 = input.LA(1);
+
+                if ( (LA109_0==87) ) {
+                    alt109=1;
+                }
+
+
+                switch (alt109) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5076:2: kw= 'and' this_logical_factor_2= rulelogical_factor
+            	    {
+            	    kw=(Token)input.LT(1);
+            	    match(input,87,FOLLOW_87_in_rulelogical_term11997); 
+
+            	            current.merge(kw);
+            	            createLeafNode(grammarAccess.getLogical_termAccess().getAndKeyword_1_0(), null); 
+            	        
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getLogical_termAccess().getLogical_factorParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulelogical_factor_in_rulelogical_term12019);
+            	    this_logical_factor_2=rulelogical_factor();
+            	    _fsp--;
+
+
+            	    		current.merge(this_logical_factor_2);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop109;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulelogical_term
+
+
+    // $ANTLR start entryRulelogical_factor
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5100:1: entryRulelogical_factor returns [String current=null] : iv_rulelogical_factor= rulelogical_factor EOF ;
+    public final String entryRulelogical_factor() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulelogical_factor = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5100:55: (iv_rulelogical_factor= rulelogical_factor EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5101:2: iv_rulelogical_factor= rulelogical_factor EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getLogical_factorRule(), currentNode); 
+            pushFollow(FOLLOW_rulelogical_factor_in_entryRulelogical_factor12065);
+            iv_rulelogical_factor=rulelogical_factor();
+            _fsp--;
+
+             current =iv_rulelogical_factor.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulelogical_factor12076); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulelogical_factor
+
+
+    // $ANTLR start rulelogical_factor
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5108:1: rulelogical_factor returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= 'not' )? this_relation_1= rulerelation ) ;
+    public final AntlrDatatypeRuleToken rulelogical_factor() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        AntlrDatatypeRuleToken this_relation_1 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5114:6: ( ( (kw= 'not' )? this_relation_1= rulerelation ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5115:1: ( (kw= 'not' )? this_relation_1= rulerelation )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5115:1: ( (kw= 'not' )? this_relation_1= rulerelation )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5115:2: (kw= 'not' )? this_relation_1= rulerelation
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5115:2: (kw= 'not' )?
+            int alt110=2;
+            int LA110_0 = input.LA(1);
+
+            if ( (LA110_0==88) ) {
+                alt110=1;
+            }
+            switch (alt110) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5116:2: kw= 'not'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,88,FOLLOW_88_in_rulelogical_factor12115); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getLogical_factorAccess().getNotKeyword_0(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+             
+                    currentNode=createCompositeNode(grammarAccess.getLogical_factorAccess().getRelationParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_rulerelation_in_rulelogical_factor12139);
+            this_relation_1=rulerelation();
+            _fsp--;
+
+
+            		current.merge(this_relation_1);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulelogical_factor
+
+
+    // $ANTLR start entryRulerelation
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5140:1: entryRulerelation returns [String current=null] : iv_rulerelation= rulerelation EOF ;
+    public final String entryRulerelation() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulerelation = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5140:49: (iv_rulerelation= rulerelation EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5141:2: iv_rulerelation= rulerelation EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getRelationRule(), currentNode); 
+            pushFollow(FOLLOW_rulerelation_in_entryRulerelation12183);
+            iv_rulerelation=rulerelation();
+            _fsp--;
+
+             current =iv_rulerelation.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulerelation12194); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulerelation
+
+
+    // $ANTLR start rulerelation
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5148:1: rulerelation returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_arithmetic_expression_0= rulearithmetic_expression ( (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression )? ) ;
+    public final AntlrDatatypeRuleToken rulerelation() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_LESS_1=null;
+        Token this_LESSEQ_2=null;
+        Token this_GREATER_3=null;
+        Token this_GREATEREQ_4=null;
+        Token this_EQEQ_5=null;
+        Token this_LESSGT_6=null;
+        AntlrDatatypeRuleToken this_arithmetic_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_arithmetic_expression_7 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5154:6: ( (this_arithmetic_expression_0= rulearithmetic_expression ( (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5155:1: (this_arithmetic_expression_0= rulearithmetic_expression ( (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5155:1: (this_arithmetic_expression_0= rulearithmetic_expression ( (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5156:5: this_arithmetic_expression_0= rulearithmetic_expression ( (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getRelationAccess().getArithmetic_expressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulearithmetic_expression_in_rulerelation12241);
+            this_arithmetic_expression_0=rulearithmetic_expression();
+            _fsp--;
+
+
+            		current.merge(this_arithmetic_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5166:1: ( (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression )?
+            int alt112=2;
+            int LA112_0 = input.LA(1);
+
+            if ( ((LA112_0>=RULE_LESS && LA112_0<=RULE_LESSGT)) ) {
+                alt112=1;
+            }
+            switch (alt112) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5166:2: (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT ) this_arithmetic_expression_7= rulearithmetic_expression
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5166:2: (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT )
+                    int alt111=6;
+                    switch ( input.LA(1) ) {
+                    case RULE_LESS:
+                        {
+                        alt111=1;
+                        }
+                        break;
+                    case RULE_LESSEQ:
+                        {
+                        alt111=2;
+                        }
+                        break;
+                    case RULE_GREATER:
+                        {
+                        alt111=3;
+                        }
+                        break;
+                    case RULE_GREATEREQ:
+                        {
+                        alt111=4;
+                        }
+                        break;
+                    case RULE_EQEQ:
+                        {
+                        alt111=5;
+                        }
+                        break;
+                    case RULE_LESSGT:
+                        {
+                        alt111=6;
+                        }
+                        break;
+                    default:
+                        NoViableAltException nvae =
+                            new NoViableAltException("5166:2: (this_LESS_1= RULE_LESS | this_LESSEQ_2= RULE_LESSEQ | this_GREATER_3= RULE_GREATER | this_GREATEREQ_4= RULE_GREATEREQ | this_EQEQ_5= RULE_EQEQ | this_LESSGT_6= RULE_LESSGT )", 111, 0, input);
+
+                        throw nvae;
+                    }
+
+                    switch (alt111) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5166:7: this_LESS_1= RULE_LESS
+                            {
+                            this_LESS_1=(Token)input.LT(1);
+                            match(input,RULE_LESS,FOLLOW_RULE_LESS_in_rulerelation12263); 
+
+                            		current.merge(this_LESS_1);
+                                
+                             
+                                createLeafNode(grammarAccess.getRelationAccess().getLESSTerminalRuleCall_1_0_0(), null); 
+                                
+
+                            }
+                            break;
+                        case 2 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5174:10: this_LESSEQ_2= RULE_LESSEQ
+                            {
+                            this_LESSEQ_2=(Token)input.LT(1);
+                            match(input,RULE_LESSEQ,FOLLOW_RULE_LESSEQ_in_rulerelation12289); 
+
+                            		current.merge(this_LESSEQ_2);
+                                
+                             
+                                createLeafNode(grammarAccess.getRelationAccess().getLESSEQTerminalRuleCall_1_0_1(), null); 
+                                
+
+                            }
+                            break;
+                        case 3 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5182:10: this_GREATER_3= RULE_GREATER
+                            {
+                            this_GREATER_3=(Token)input.LT(1);
+                            match(input,RULE_GREATER,FOLLOW_RULE_GREATER_in_rulerelation12315); 
+
+                            		current.merge(this_GREATER_3);
+                                
+                             
+                                createLeafNode(grammarAccess.getRelationAccess().getGREATERTerminalRuleCall_1_0_2(), null); 
+                                
+
+                            }
+                            break;
+                        case 4 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5190:10: this_GREATEREQ_4= RULE_GREATEREQ
+                            {
+                            this_GREATEREQ_4=(Token)input.LT(1);
+                            match(input,RULE_GREATEREQ,FOLLOW_RULE_GREATEREQ_in_rulerelation12341); 
+
+                            		current.merge(this_GREATEREQ_4);
+                                
+                             
+                                createLeafNode(grammarAccess.getRelationAccess().getGREATEREQTerminalRuleCall_1_0_3(), null); 
+                                
+
+                            }
+                            break;
+                        case 5 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5198:10: this_EQEQ_5= RULE_EQEQ
+                            {
+                            this_EQEQ_5=(Token)input.LT(1);
+                            match(input,RULE_EQEQ,FOLLOW_RULE_EQEQ_in_rulerelation12367); 
+
+                            		current.merge(this_EQEQ_5);
+                                
+                             
+                                createLeafNode(grammarAccess.getRelationAccess().getEQEQTerminalRuleCall_1_0_4(), null); 
+                                
+
+                            }
+                            break;
+                        case 6 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5206:10: this_LESSGT_6= RULE_LESSGT
+                            {
+                            this_LESSGT_6=(Token)input.LT(1);
+                            match(input,RULE_LESSGT,FOLLOW_RULE_LESSGT_in_rulerelation12393); 
+
+                            		current.merge(this_LESSGT_6);
+                                
+                             
+                                createLeafNode(grammarAccess.getRelationAccess().getLESSGTTerminalRuleCall_1_0_5(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                     
+                            currentNode=createCompositeNode(grammarAccess.getRelationAccess().getArithmetic_expressionParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulearithmetic_expression_in_rulerelation12421);
+                    this_arithmetic_expression_7=rulearithmetic_expression();
+                    _fsp--;
+
+
+                    		current.merge(this_arithmetic_expression_7);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulerelation
+
+
+    // $ANTLR start entryRulearithmetic_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5232:1: entryRulearithmetic_expression returns [String current=null] : iv_rulearithmetic_expression= rulearithmetic_expression EOF ;
+    public final String entryRulearithmetic_expression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulearithmetic_expression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5232:62: (iv_rulearithmetic_expression= rulearithmetic_expression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5233:2: iv_rulearithmetic_expression= rulearithmetic_expression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getArithmetic_expressionRule(), currentNode); 
+            pushFollow(FOLLOW_rulearithmetic_expression_in_entryRulearithmetic_expression12467);
+            iv_rulearithmetic_expression=rulearithmetic_expression();
+            _fsp--;
+
+             current =iv_rulearithmetic_expression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulearithmetic_expression12478); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulearithmetic_expression
+
+
+    // $ANTLR start rulearithmetic_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5240:1: rulearithmetic_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_unary_arithmetic_expression_0= ruleunary_arithmetic_expression ( (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm )* ) ;
+    public final AntlrDatatypeRuleToken rulearithmetic_expression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_PLUS_1=null;
+        Token this_MINUS_2=null;
+        Token this_PLUS_EW_3=null;
+        Token this_MINUS_EW_4=null;
+        AntlrDatatypeRuleToken this_unary_arithmetic_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_term_5 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5246:6: ( (this_unary_arithmetic_expression_0= ruleunary_arithmetic_expression ( (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5247:1: (this_unary_arithmetic_expression_0= ruleunary_arithmetic_expression ( (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5247:1: (this_unary_arithmetic_expression_0= ruleunary_arithmetic_expression ( (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5248:5: this_unary_arithmetic_expression_0= ruleunary_arithmetic_expression ( (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getArithmetic_expressionAccess().getUnary_arithmetic_expressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleunary_arithmetic_expression_in_rulearithmetic_expression12525);
+            this_unary_arithmetic_expression_0=ruleunary_arithmetic_expression();
+            _fsp--;
+
+
+            		current.merge(this_unary_arithmetic_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5258:1: ( (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm )*
+            loop114:
+            do {
+                int alt114=2;
+                int LA114_0 = input.LA(1);
+
+                if ( ((LA114_0>=RULE_PLUS && LA114_0<=RULE_MINUS_EW)) ) {
+                    alt114=1;
+                }
+
+
+                switch (alt114) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5258:2: (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW ) this_term_5= ruleterm
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5258:2: (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW )
+            	    int alt113=4;
+            	    switch ( input.LA(1) ) {
+            	    case RULE_PLUS:
+            	        {
+            	        alt113=1;
+            	        }
+            	        break;
+            	    case RULE_MINUS:
+            	        {
+            	        alt113=2;
+            	        }
+            	        break;
+            	    case RULE_PLUS_EW:
+            	        {
+            	        alt113=3;
+            	        }
+            	        break;
+            	    case RULE_MINUS_EW:
+            	        {
+            	        alt113=4;
+            	        }
+            	        break;
+            	    default:
+            	        NoViableAltException nvae =
+            	            new NoViableAltException("5258:2: (this_PLUS_1= RULE_PLUS | this_MINUS_2= RULE_MINUS | this_PLUS_EW_3= RULE_PLUS_EW | this_MINUS_EW_4= RULE_MINUS_EW )", 113, 0, input);
+
+            	        throw nvae;
+            	    }
+
+            	    switch (alt113) {
+            	        case 1 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5258:7: this_PLUS_1= RULE_PLUS
+            	            {
+            	            this_PLUS_1=(Token)input.LT(1);
+            	            match(input,RULE_PLUS,FOLLOW_RULE_PLUS_in_rulearithmetic_expression12547); 
+
+            	            		current.merge(this_PLUS_1);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getArithmetic_expressionAccess().getPLUSTerminalRuleCall_1_0_0(), null); 
+            	                
+
+            	            }
+            	            break;
+            	        case 2 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5266:10: this_MINUS_2= RULE_MINUS
+            	            {
+            	            this_MINUS_2=(Token)input.LT(1);
+            	            match(input,RULE_MINUS,FOLLOW_RULE_MINUS_in_rulearithmetic_expression12573); 
+
+            	            		current.merge(this_MINUS_2);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getArithmetic_expressionAccess().getMINUSTerminalRuleCall_1_0_1(), null); 
+            	                
+
+            	            }
+            	            break;
+            	        case 3 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5274:10: this_PLUS_EW_3= RULE_PLUS_EW
+            	            {
+            	            this_PLUS_EW_3=(Token)input.LT(1);
+            	            match(input,RULE_PLUS_EW,FOLLOW_RULE_PLUS_EW_in_rulearithmetic_expression12599); 
+
+            	            		current.merge(this_PLUS_EW_3);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getArithmetic_expressionAccess().getPLUS_EWTerminalRuleCall_1_0_2(), null); 
+            	                
+
+            	            }
+            	            break;
+            	        case 4 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5282:10: this_MINUS_EW_4= RULE_MINUS_EW
+            	            {
+            	            this_MINUS_EW_4=(Token)input.LT(1);
+            	            match(input,RULE_MINUS_EW,FOLLOW_RULE_MINUS_EW_in_rulearithmetic_expression12625); 
+
+            	            		current.merge(this_MINUS_EW_4);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getArithmetic_expressionAccess().getMINUS_EWTerminalRuleCall_1_0_3(), null); 
+            	                
+
+            	            }
+            	            break;
+
+            	    }
+
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getArithmetic_expressionAccess().getTermParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_ruleterm_in_rulearithmetic_expression12653);
+            	    this_term_5=ruleterm();
+            	    _fsp--;
+
+
+            	    		current.merge(this_term_5);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop114;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulearithmetic_expression
+
+
+    // $ANTLR start entryRuleunary_arithmetic_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5308:1: entryRuleunary_arithmetic_expression returns [String current=null] : iv_ruleunary_arithmetic_expression= ruleunary_arithmetic_expression EOF ;
+    public final String entryRuleunary_arithmetic_expression() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleunary_arithmetic_expression = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5308:68: (iv_ruleunary_arithmetic_expression= ruleunary_arithmetic_expression EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5309:2: iv_ruleunary_arithmetic_expression= ruleunary_arithmetic_expression EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getUnary_arithmetic_expressionRule(), currentNode); 
+            pushFollow(FOLLOW_ruleunary_arithmetic_expression_in_entryRuleunary_arithmetic_expression12699);
+            iv_ruleunary_arithmetic_expression=ruleunary_arithmetic_expression();
+            _fsp--;
+
+             current =iv_ruleunary_arithmetic_expression.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleunary_arithmetic_expression12710); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleunary_arithmetic_expression
+
+
+    // $ANTLR start ruleunary_arithmetic_expression
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5316:1: ruleunary_arithmetic_expression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_PLUS_0= RULE_PLUS this_term_1= ruleterm ) | (this_MINUS_2= RULE_MINUS this_term_3= ruleterm ) | (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm ) | (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm ) | this_term_8= ruleterm ) ;
+    public final AntlrDatatypeRuleToken ruleunary_arithmetic_expression() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_PLUS_0=null;
+        Token this_MINUS_2=null;
+        Token this_PLUS_EW_4=null;
+        Token this_MINUS_EW_6=null;
+        AntlrDatatypeRuleToken this_term_1 = null;
+
+        AntlrDatatypeRuleToken this_term_3 = null;
+
+        AntlrDatatypeRuleToken this_term_5 = null;
+
+        AntlrDatatypeRuleToken this_term_7 = null;
+
+        AntlrDatatypeRuleToken this_term_8 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5322:6: ( ( (this_PLUS_0= RULE_PLUS this_term_1= ruleterm ) | (this_MINUS_2= RULE_MINUS this_term_3= ruleterm ) | (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm ) | (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm ) | this_term_8= ruleterm ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5323:1: ( (this_PLUS_0= RULE_PLUS this_term_1= ruleterm ) | (this_MINUS_2= RULE_MINUS this_term_3= ruleterm ) | (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm ) | (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm ) | this_term_8= ruleterm )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5323:1: ( (this_PLUS_0= RULE_PLUS this_term_1= ruleterm ) | (this_MINUS_2= RULE_MINUS this_term_3= ruleterm ) | (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm ) | (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm ) | this_term_8= ruleterm )
+            int alt115=5;
+            switch ( input.LA(1) ) {
+            case RULE_PLUS:
+                {
+                alt115=1;
+                }
+                break;
+            case RULE_MINUS:
+                {
+                alt115=2;
+                }
+                break;
+            case RULE_PLUS_EW:
+                {
+                alt115=3;
+                }
+                break;
+            case RULE_MINUS_EW:
+                {
+                alt115=4;
+                }
+                break;
+            case RULE_IDENT:
+            case RULE_LPAR:
+            case RULE_STRING:
+            case RULE_UNSIGNED_INTEGER:
+            case RULE_UNSIGNED_REAL:
+            case RULE_LBRACK:
+            case RULE_LBRACE:
+            case 48:
+            case 50:
+            case 73:
+            case 89:
+            case 90:
+                {
+                alt115=5;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("5323:1: ( (this_PLUS_0= RULE_PLUS this_term_1= ruleterm ) | (this_MINUS_2= RULE_MINUS this_term_3= ruleterm ) | (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm ) | (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm ) | this_term_8= ruleterm )", 115, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt115) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5323:2: (this_PLUS_0= RULE_PLUS this_term_1= ruleterm )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5323:2: (this_PLUS_0= RULE_PLUS this_term_1= ruleterm )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5323:7: this_PLUS_0= RULE_PLUS this_term_1= ruleterm
+                    {
+                    this_PLUS_0=(Token)input.LT(1);
+                    match(input,RULE_PLUS,FOLLOW_RULE_PLUS_in_ruleunary_arithmetic_expression12751); 
+
+                    		current.merge(this_PLUS_0);
+                        
+                     
+                        createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getPLUSTerminalRuleCall_0_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_0_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12778);
+                    this_term_1=ruleterm();
+                    _fsp--;
+
+
+                    		current.merge(this_term_1);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5342:6: (this_MINUS_2= RULE_MINUS this_term_3= ruleterm )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5342:6: (this_MINUS_2= RULE_MINUS this_term_3= ruleterm )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5342:11: this_MINUS_2= RULE_MINUS this_term_3= ruleterm
+                    {
+                    this_MINUS_2=(Token)input.LT(1);
+                    match(input,RULE_MINUS,FOLLOW_RULE_MINUS_in_ruleunary_arithmetic_expression12806); 
+
+                    		current.merge(this_MINUS_2);
+                        
+                     
+                        createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getMINUSTerminalRuleCall_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12833);
+                    this_term_3=ruleterm();
+                    _fsp--;
+
+
+                    		current.merge(this_term_3);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5361:6: (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5361:6: (this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5361:11: this_PLUS_EW_4= RULE_PLUS_EW this_term_5= ruleterm
+                    {
+                    this_PLUS_EW_4=(Token)input.LT(1);
+                    match(input,RULE_PLUS_EW,FOLLOW_RULE_PLUS_EW_in_ruleunary_arithmetic_expression12861); 
+
+                    		current.merge(this_PLUS_EW_4);
+                        
+                     
+                        createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getPLUS_EWTerminalRuleCall_2_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_2_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12888);
+                    this_term_5=ruleterm();
+                    _fsp--;
+
+
+                    		current.merge(this_term_5);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5380:6: (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5380:6: (this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5380:11: this_MINUS_EW_6= RULE_MINUS_EW this_term_7= ruleterm
+                    {
+                    this_MINUS_EW_6=(Token)input.LT(1);
+                    match(input,RULE_MINUS_EW,FOLLOW_RULE_MINUS_EW_in_ruleunary_arithmetic_expression12916); 
+
+                    		current.merge(this_MINUS_EW_6);
+                        
+                     
+                        createLeafNode(grammarAccess.getUnary_arithmetic_expressionAccess().getMINUS_EWTerminalRuleCall_3_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_3_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12943);
+                    this_term_7=ruleterm();
+                    _fsp--;
+
+
+                    		current.merge(this_term_7);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5400:5: this_term_8= ruleterm
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getUnary_arithmetic_expressionAccess().getTermParserRuleCall_4(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12977);
+                    this_term_8=ruleterm();
+                    _fsp--;
+
+
+                    		current.merge(this_term_8);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleunary_arithmetic_expression
+
+
+    // $ANTLR start entryRuleterm
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5418:1: entryRuleterm returns [String current=null] : iv_ruleterm= ruleterm EOF ;
+    public final String entryRuleterm() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleterm = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5418:45: (iv_ruleterm= ruleterm EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5419:2: iv_ruleterm= ruleterm EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getTermRule(), currentNode); 
+            pushFollow(FOLLOW_ruleterm_in_entryRuleterm13021);
+            iv_ruleterm=ruleterm();
+            _fsp--;
+
+             current =iv_ruleterm.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleterm13032); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleterm
+
+
+    // $ANTLR start ruleterm
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5426:1: ruleterm returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_factor_0= rulefactor ( (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor )* ) ;
+    public final AntlrDatatypeRuleToken ruleterm() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_STAR_1=null;
+        Token this_SLASH_2=null;
+        Token this_STAR_EW_3=null;
+        Token this_SLASH_EW_4=null;
+        AntlrDatatypeRuleToken this_factor_0 = null;
+
+        AntlrDatatypeRuleToken this_factor_5 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5432:6: ( (this_factor_0= rulefactor ( (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5433:1: (this_factor_0= rulefactor ( (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5433:1: (this_factor_0= rulefactor ( (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5434:5: this_factor_0= rulefactor ( (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getTermAccess().getFactorParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulefactor_in_ruleterm13079);
+            this_factor_0=rulefactor();
+            _fsp--;
+
+
+            		current.merge(this_factor_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5444:1: ( (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor )*
+            loop117:
+            do {
+                int alt117=2;
+                int LA117_0 = input.LA(1);
+
+                if ( ((LA117_0>=RULE_STAR && LA117_0<=RULE_SLASH_EW)) ) {
+                    alt117=1;
+                }
+
+
+                switch (alt117) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5444:2: (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW ) this_factor_5= rulefactor
+            	    {
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5444:2: (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW )
+            	    int alt116=4;
+            	    switch ( input.LA(1) ) {
+            	    case RULE_STAR:
+            	        {
+            	        alt116=1;
+            	        }
+            	        break;
+            	    case RULE_SLASH:
+            	        {
+            	        alt116=2;
+            	        }
+            	        break;
+            	    case RULE_STAR_EW:
+            	        {
+            	        alt116=3;
+            	        }
+            	        break;
+            	    case RULE_SLASH_EW:
+            	        {
+            	        alt116=4;
+            	        }
+            	        break;
+            	    default:
+            	        NoViableAltException nvae =
+            	            new NoViableAltException("5444:2: (this_STAR_1= RULE_STAR | this_SLASH_2= RULE_SLASH | this_STAR_EW_3= RULE_STAR_EW | this_SLASH_EW_4= RULE_SLASH_EW )", 116, 0, input);
+
+            	        throw nvae;
+            	    }
+
+            	    switch (alt116) {
+            	        case 1 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5444:7: this_STAR_1= RULE_STAR
+            	            {
+            	            this_STAR_1=(Token)input.LT(1);
+            	            match(input,RULE_STAR,FOLLOW_RULE_STAR_in_ruleterm13101); 
+
+            	            		current.merge(this_STAR_1);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getTermAccess().getSTARTerminalRuleCall_1_0_0(), null); 
+            	                
+
+            	            }
+            	            break;
+            	        case 2 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5452:10: this_SLASH_2= RULE_SLASH
+            	            {
+            	            this_SLASH_2=(Token)input.LT(1);
+            	            match(input,RULE_SLASH,FOLLOW_RULE_SLASH_in_ruleterm13127); 
+
+            	            		current.merge(this_SLASH_2);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getTermAccess().getSLASHTerminalRuleCall_1_0_1(), null); 
+            	                
+
+            	            }
+            	            break;
+            	        case 3 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5460:10: this_STAR_EW_3= RULE_STAR_EW
+            	            {
+            	            this_STAR_EW_3=(Token)input.LT(1);
+            	            match(input,RULE_STAR_EW,FOLLOW_RULE_STAR_EW_in_ruleterm13153); 
+
+            	            		current.merge(this_STAR_EW_3);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getTermAccess().getSTAR_EWTerminalRuleCall_1_0_2(), null); 
+            	                
+
+            	            }
+            	            break;
+            	        case 4 :
+            	            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5468:10: this_SLASH_EW_4= RULE_SLASH_EW
+            	            {
+            	            this_SLASH_EW_4=(Token)input.LT(1);
+            	            match(input,RULE_SLASH_EW,FOLLOW_RULE_SLASH_EW_in_ruleterm13179); 
+
+            	            		current.merge(this_SLASH_EW_4);
+            	                
+            	             
+            	                createLeafNode(grammarAccess.getTermAccess().getSLASH_EWTerminalRuleCall_1_0_3(), null); 
+            	                
+
+            	            }
+            	            break;
+
+            	    }
+
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getTermAccess().getFactorParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulefactor_in_ruleterm13207);
+            	    this_factor_5=rulefactor();
+            	    _fsp--;
+
+
+            	    		current.merge(this_factor_5);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop117;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleterm
+
+
+    // $ANTLR start entryRulefactor
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5494:1: entryRulefactor returns [String current=null] : iv_rulefactor= rulefactor EOF ;
+    public final String entryRulefactor() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefactor = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5494:47: (iv_rulefactor= rulefactor EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5495:2: iv_rulefactor= rulefactor EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFactorRule(), currentNode); 
+            pushFollow(FOLLOW_rulefactor_in_entryRulefactor13253);
+            iv_rulefactor=rulefactor();
+            _fsp--;
+
+             current =iv_rulefactor.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefactor13264); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefactor
+
+
+    // $ANTLR start rulefactor
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5502:1: rulefactor returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_primary_0= ruleprimary ( (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary )? ) ;
+    public final AntlrDatatypeRuleToken rulefactor() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_POWER_1=null;
+        Token this_POWER_EW_2=null;
+        AntlrDatatypeRuleToken this_primary_0 = null;
+
+        AntlrDatatypeRuleToken this_primary_3 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5508:6: ( (this_primary_0= ruleprimary ( (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5509:1: (this_primary_0= ruleprimary ( (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5509:1: (this_primary_0= ruleprimary ( (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5510:5: this_primary_0= ruleprimary ( (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getFactorAccess().getPrimaryParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleprimary_in_rulefactor13311);
+            this_primary_0=ruleprimary();
+            _fsp--;
+
+
+            		current.merge(this_primary_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5520:1: ( (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary )?
+            int alt119=2;
+            int LA119_0 = input.LA(1);
+
+            if ( ((LA119_0>=RULE_POWER && LA119_0<=RULE_POWER_EW)) ) {
+                alt119=1;
+            }
+            switch (alt119) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5520:2: (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW ) this_primary_3= ruleprimary
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5520:2: (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW )
+                    int alt118=2;
+                    int LA118_0 = input.LA(1);
+
+                    if ( (LA118_0==RULE_POWER) ) {
+                        alt118=1;
+                    }
+                    else if ( (LA118_0==RULE_POWER_EW) ) {
+                        alt118=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("5520:2: (this_POWER_1= RULE_POWER | this_POWER_EW_2= RULE_POWER_EW )", 118, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt118) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5520:7: this_POWER_1= RULE_POWER
+                            {
+                            this_POWER_1=(Token)input.LT(1);
+                            match(input,RULE_POWER,FOLLOW_RULE_POWER_in_rulefactor13333); 
+
+                            		current.merge(this_POWER_1);
+                                
+                             
+                                createLeafNode(grammarAccess.getFactorAccess().getPOWERTerminalRuleCall_1_0_0(), null); 
+                                
+
+                            }
+                            break;
+                        case 2 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5528:10: this_POWER_EW_2= RULE_POWER_EW
+                            {
+                            this_POWER_EW_2=(Token)input.LT(1);
+                            match(input,RULE_POWER_EW,FOLLOW_RULE_POWER_EW_in_rulefactor13359); 
+
+                            		current.merge(this_POWER_EW_2);
+                                
+                             
+                                createLeafNode(grammarAccess.getFactorAccess().getPOWER_EWTerminalRuleCall_1_0_1(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+                     
+                            currentNode=createCompositeNode(grammarAccess.getFactorAccess().getPrimaryParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleprimary_in_rulefactor13387);
+                    this_primary_3=ruleprimary();
+                    _fsp--;
+
+
+                    		current.merge(this_primary_3);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefactor
+
+
+    // $ANTLR start entryRuleprimary
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5554:1: entryRuleprimary returns [String current=null] : iv_ruleprimary= ruleprimary EOF ;
+    public final String entryRuleprimary() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleprimary = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5554:48: (iv_ruleprimary= ruleprimary EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5555:2: iv_ruleprimary= ruleprimary EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getPrimaryRule(), currentNode); 
+            pushFollow(FOLLOW_ruleprimary_in_entryRuleprimary13433);
+            iv_ruleprimary=ruleprimary();
+            _fsp--;
+
+             current =iv_ruleprimary.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleprimary13444); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleprimary
+
+
+    // $ANTLR start ruleprimary
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5562:1: ruleprimary returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_UNSIGNED_INTEGER_0= RULE_UNSIGNED_INTEGER | this_UNSIGNED_REAL_1= RULE_UNSIGNED_REAL | this_STRING_2= RULE_STRING | kw= 'false' | kw= 'true' | this_component_reference__function_call_5= rulecomponent_reference__function_call | (kw= 'der' this_function_call_7= rulefunction_call ) | (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR ) | (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK ) | (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE ) | kw= 'end' ) ;
+    public final AntlrDatatypeRuleToken ruleprimary() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_UNSIGNED_INTEGER_0=null;
+        Token this_UNSIGNED_REAL_1=null;
+        Token this_STRING_2=null;
+        Token kw=null;
+        Token this_LPAR_8=null;
+        Token this_RPAR_10=null;
+        Token this_LBRACK_11=null;
+        Token this_SEMICOLON_13=null;
+        Token this_RBRACK_15=null;
+        Token this_LBRACE_16=null;
+        Token this_RBRACE_18=null;
+        AntlrDatatypeRuleToken this_component_reference__function_call_5 = null;
+
+        AntlrDatatypeRuleToken this_function_call_7 = null;
+
+        AntlrDatatypeRuleToken this_expression_list_9 = null;
+
+        AntlrDatatypeRuleToken this_expression_list_12 = null;
+
+        AntlrDatatypeRuleToken this_expression_list_14 = null;
+
+        AntlrDatatypeRuleToken this_for_or_expression_list_17 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5568:6: ( (this_UNSIGNED_INTEGER_0= RULE_UNSIGNED_INTEGER | this_UNSIGNED_REAL_1= RULE_UNSIGNED_REAL | this_STRING_2= RULE_STRING | kw= 'false' | kw= 'true' | this_component_reference__function_call_5= rulecomponent_reference__function_call | (kw= 'der' this_function_call_7= rulefunction_call ) | (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR ) | (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK ) | (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE ) | kw= 'end' ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5569:1: (this_UNSIGNED_INTEGER_0= RULE_UNSIGNED_INTEGER | this_UNSIGNED_REAL_1= RULE_UNSIGNED_REAL | this_STRING_2= RULE_STRING | kw= 'false' | kw= 'true' | this_component_reference__function_call_5= rulecomponent_reference__function_call | (kw= 'der' this_function_call_7= rulefunction_call ) | (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR ) | (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK ) | (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE ) | kw= 'end' )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5569:1: (this_UNSIGNED_INTEGER_0= RULE_UNSIGNED_INTEGER | this_UNSIGNED_REAL_1= RULE_UNSIGNED_REAL | this_STRING_2= RULE_STRING | kw= 'false' | kw= 'true' | this_component_reference__function_call_5= rulecomponent_reference__function_call | (kw= 'der' this_function_call_7= rulefunction_call ) | (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR ) | (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK ) | (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE ) | kw= 'end' )
+            int alt121=11;
+            switch ( input.LA(1) ) {
+            case RULE_UNSIGNED_INTEGER:
+                {
+                alt121=1;
+                }
+                break;
+            case RULE_UNSIGNED_REAL:
+                {
+                alt121=2;
+                }
+                break;
+            case RULE_STRING:
+                {
+                alt121=3;
+                }
+                break;
+            case 89:
+                {
+                alt121=4;
+                }
+                break;
+            case 90:
+                {
+                alt121=5;
+                }
+                break;
+            case RULE_IDENT:
+            case 73:
+                {
+                alt121=6;
+                }
+                break;
+            case 50:
+                {
+                alt121=7;
+                }
+                break;
+            case RULE_LPAR:
+                {
+                alt121=8;
+                }
+                break;
+            case RULE_LBRACK:
+                {
+                alt121=9;
+                }
+                break;
+            case RULE_LBRACE:
+                {
+                alt121=10;
+                }
+                break;
+            case 48:
+                {
+                alt121=11;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("5569:1: (this_UNSIGNED_INTEGER_0= RULE_UNSIGNED_INTEGER | this_UNSIGNED_REAL_1= RULE_UNSIGNED_REAL | this_STRING_2= RULE_STRING | kw= 'false' | kw= 'true' | this_component_reference__function_call_5= rulecomponent_reference__function_call | (kw= 'der' this_function_call_7= rulefunction_call ) | (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR ) | (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK ) | (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE ) | kw= 'end' )", 121, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt121) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5569:6: this_UNSIGNED_INTEGER_0= RULE_UNSIGNED_INTEGER
+                    {
+                    this_UNSIGNED_INTEGER_0=(Token)input.LT(1);
+                    match(input,RULE_UNSIGNED_INTEGER,FOLLOW_RULE_UNSIGNED_INTEGER_in_ruleprimary13484); 
+
+                    		current.merge(this_UNSIGNED_INTEGER_0);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getUNSIGNED_INTEGERTerminalRuleCall_0(), null); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5577:10: this_UNSIGNED_REAL_1= RULE_UNSIGNED_REAL
+                    {
+                    this_UNSIGNED_REAL_1=(Token)input.LT(1);
+                    match(input,RULE_UNSIGNED_REAL,FOLLOW_RULE_UNSIGNED_REAL_in_ruleprimary13510); 
+
+                    		current.merge(this_UNSIGNED_REAL_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getUNSIGNED_REALTerminalRuleCall_1(), null); 
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5585:10: this_STRING_2= RULE_STRING
+                    {
+                    this_STRING_2=(Token)input.LT(1);
+                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleprimary13536); 
+
+                    		current.merge(this_STRING_2);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getSTRINGTerminalRuleCall_2(), null); 
+                        
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5594:2: kw= 'false'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,89,FOLLOW_89_in_ruleprimary13560); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getPrimaryAccess().getFalseKeyword_3(), null); 
+                        
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5601:2: kw= 'true'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,90,FOLLOW_90_in_ruleprimary13579); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getPrimaryAccess().getTrueKeyword_4(), null); 
+                        
+
+                    }
+                    break;
+                case 6 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5608:5: this_component_reference__function_call_5= rulecomponent_reference__function_call
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getComponent_reference__function_callParserRuleCall_5(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulecomponent_reference__function_call_in_ruleprimary13607);
+                    this_component_reference__function_call_5=rulecomponent_reference__function_call();
+                    _fsp--;
+
+
+                    		current.merge(this_component_reference__function_call_5);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 7 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5619:6: (kw= 'der' this_function_call_7= rulefunction_call )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5619:6: (kw= 'der' this_function_call_7= rulefunction_call )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5620:2: kw= 'der' this_function_call_7= rulefunction_call
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,50,FOLLOW_50_in_ruleprimary13632); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getPrimaryAccess().getDerKeyword_6_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getFunction_callParserRuleCall_6_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefunction_call_in_ruleprimary13654);
+                    this_function_call_7=rulefunction_call();
+                    _fsp--;
+
+
+                    		current.merge(this_function_call_7);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5637:6: (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5637:6: (this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5637:11: this_LPAR_8= RULE_LPAR this_expression_list_9= ruleexpression_list this_RPAR_10= RULE_RPAR
+                    {
+                    this_LPAR_8=(Token)input.LT(1);
+                    match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_ruleprimary13682); 
+
+                    		current.merge(this_LPAR_8);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getLPARTerminalRuleCall_7_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getExpression_listParserRuleCall_7_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_list_in_ruleprimary13709);
+                    this_expression_list_9=ruleexpression_list();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_list_9);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+                    this_RPAR_10=(Token)input.LT(1);
+                    match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_ruleprimary13729); 
+
+                    		current.merge(this_RPAR_10);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getRPARTerminalRuleCall_7_2(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 9 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5663:6: (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5663:6: (this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5663:11: this_LBRACK_11= RULE_LBRACK this_expression_list_12= ruleexpression_list (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )* this_RBRACK_15= RULE_RBRACK
+                    {
+                    this_LBRACK_11=(Token)input.LT(1);
+                    match(input,RULE_LBRACK,FOLLOW_RULE_LBRACK_in_ruleprimary13757); 
+
+                    		current.merge(this_LBRACK_11);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getLBRACKTerminalRuleCall_8_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getExpression_listParserRuleCall_8_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_list_in_ruleprimary13784);
+                    this_expression_list_12=ruleexpression_list();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_list_12);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5681:1: (this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list )*
+                    loop120:
+                    do {
+                        int alt120=2;
+                        int LA120_0 = input.LA(1);
+
+                        if ( (LA120_0==RULE_SEMICOLON) ) {
+                            alt120=1;
+                        }
+
+
+                        switch (alt120) {
+                    	case 1 :
+                    	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5681:6: this_SEMICOLON_13= RULE_SEMICOLON this_expression_list_14= ruleexpression_list
+                    	    {
+                    	    this_SEMICOLON_13=(Token)input.LT(1);
+                    	    match(input,RULE_SEMICOLON,FOLLOW_RULE_SEMICOLON_in_ruleprimary13805); 
+
+                    	    		current.merge(this_SEMICOLON_13);
+                    	        
+                    	     
+                    	        createLeafNode(grammarAccess.getPrimaryAccess().getSEMICOLONTerminalRuleCall_8_2_0(), null); 
+                    	        
+                    	     
+                    	            currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getExpression_listParserRuleCall_8_2_1(), currentNode); 
+                    	        
+                    	    pushFollow(FOLLOW_ruleexpression_list_in_ruleprimary13832);
+                    	    this_expression_list_14=ruleexpression_list();
+                    	    _fsp--;
+
+
+                    	    		current.merge(this_expression_list_14);
+                    	        
+                    	     
+                    	            currentNode = currentNode.getParent();
+                    	        
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop120;
+                        }
+                    } while (true);
+
+                    this_RBRACK_15=(Token)input.LT(1);
+                    match(input,RULE_RBRACK,FOLLOW_RULE_RBRACK_in_ruleprimary13854); 
+
+                    		current.merge(this_RBRACK_15);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getRBRACKTerminalRuleCall_8_3(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 10 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5707:6: (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5707:6: (this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5707:11: this_LBRACE_16= RULE_LBRACE this_for_or_expression_list_17= rulefor_or_expression_list this_RBRACE_18= RULE_RBRACE
+                    {
+                    this_LBRACE_16=(Token)input.LT(1);
+                    match(input,RULE_LBRACE,FOLLOW_RULE_LBRACE_in_ruleprimary13882); 
+
+                    		current.merge(this_LBRACE_16);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getLBRACETerminalRuleCall_9_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getPrimaryAccess().getFor_or_expression_listParserRuleCall_9_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefor_or_expression_list_in_ruleprimary13909);
+                    this_for_or_expression_list_17=rulefor_or_expression_list();
+                    _fsp--;
+
+
+                    		current.merge(this_for_or_expression_list_17);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+                    this_RBRACE_18=(Token)input.LT(1);
+                    match(input,RULE_RBRACE,FOLLOW_RULE_RBRACE_in_ruleprimary13929); 
+
+                    		current.merge(this_RBRACE_18);
+                        
+                     
+                        createLeafNode(grammarAccess.getPrimaryAccess().getRBRACETerminalRuleCall_9_2(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 11 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5734:2: kw= 'end'
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,48,FOLLOW_48_in_ruleprimary13954); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getPrimaryAccess().getEndKeyword_10(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleprimary
+
+
+    // $ANTLR start entryRulecomponent_reference__function_call
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5747:1: entryRulecomponent_reference__function_call returns [String current=null] : iv_rulecomponent_reference__function_call= rulecomponent_reference__function_call EOF ;
+    public final String entryRulecomponent_reference__function_call() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulecomponent_reference__function_call = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5747:75: (iv_rulecomponent_reference__function_call= rulecomponent_reference__function_call EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5748:2: iv_rulecomponent_reference__function_call= rulecomponent_reference__function_call EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getComponent_reference__function_callRule(), currentNode); 
+            pushFollow(FOLLOW_rulecomponent_reference__function_call_in_entryRulecomponent_reference__function_call13993);
+            iv_rulecomponent_reference__function_call=rulecomponent_reference__function_call();
+            _fsp--;
+
+             current =iv_rulecomponent_reference__function_call.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulecomponent_reference__function_call14004); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulecomponent_reference__function_call
+
+
+    // $ANTLR start rulecomponent_reference__function_call
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5755:1: rulecomponent_reference__function_call returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? ) | (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR ) ) ;
+    public final AntlrDatatypeRuleToken rulecomponent_reference__function_call() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token kw=null;
+        Token this_LPAR_3=null;
+        Token this_RPAR_4=null;
+        AntlrDatatypeRuleToken this_component_reference_0 = null;
+
+        AntlrDatatypeRuleToken this_function_call_1 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5761:6: ( ( (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? ) | (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5762:1: ( (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? ) | (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5762:1: ( (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? ) | (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR ) )
+            int alt123=2;
+            int LA123_0 = input.LA(1);
+
+            if ( (LA123_0==RULE_IDENT) ) {
+                alt123=1;
+            }
+            else if ( (LA123_0==73) ) {
+                alt123=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("5762:1: ( (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? ) | (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR ) )", 123, 0, input);
+
+                throw nvae;
+            }
+            switch (alt123) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5762:2: (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5762:2: (this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5763:5: this_component_reference_0= rulecomponent_reference (this_function_call_1= rulefunction_call )?
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getComponent_reference__function_callAccess().getComponent_referenceParserRuleCall_0_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulecomponent_reference_in_rulecomponent_reference__function_call14052);
+                    this_component_reference_0=rulecomponent_reference();
+                    _fsp--;
+
+
+                    		current.merge(this_component_reference_0);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5773:1: (this_function_call_1= rulefunction_call )?
+                    int alt122=2;
+                    int LA122_0 = input.LA(1);
+
+                    if ( (LA122_0==RULE_LPAR) ) {
+                        alt122=1;
+                    }
+                    switch (alt122) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5774:5: this_function_call_1= rulefunction_call
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getComponent_reference__function_callAccess().getFunction_callParserRuleCall_0_1(), currentNode); 
+                                
+                            pushFollow(FOLLOW_rulefunction_call_in_rulecomponent_reference__function_call14080);
+                            this_function_call_1=rulefunction_call();
+                            _fsp--;
+
+
+                            		current.merge(this_function_call_1);
+                                
+                             
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5785:6: (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5785:6: (kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5786:2: kw= 'initial' this_LPAR_3= RULE_LPAR this_RPAR_4= RULE_RPAR
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,73,FOLLOW_73_in_rulecomponent_reference__function_call14108); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getComponent_reference__function_callAccess().getInitialKeyword_1_0(), null); 
+                        
+                    this_LPAR_3=(Token)input.LT(1);
+                    match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_rulecomponent_reference__function_call14123); 
+
+                    		current.merge(this_LPAR_3);
+                        
+                     
+                        createLeafNode(grammarAccess.getComponent_reference__function_callAccess().getLPARTerminalRuleCall_1_1(), null); 
+                        
+                    this_RPAR_4=(Token)input.LT(1);
+                    match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_rulecomponent_reference__function_call14143); 
+
+                    		current.merge(this_RPAR_4);
+                        
+                     
+                        createLeafNode(grammarAccess.getComponent_reference__function_callAccess().getRPARTerminalRuleCall_1_2(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulecomponent_reference__function_call
+
+
+    // $ANTLR start entryRulename_path
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5813:1: entryRulename_path returns [String current=null] : iv_rulename_path= rulename_path EOF ;
+    public final String entryRulename_path() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulename_path = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5813:50: (iv_rulename_path= rulename_path EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5814:2: iv_rulename_path= rulename_path EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getName_pathRule(), currentNode); 
+            pushFollow(FOLLOW_rulename_path_in_entryRulename_path14188);
+            iv_rulename_path=rulename_path();
+            _fsp--;
+
+             current =iv_rulename_path.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulename_path14199); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulename_path
+
+
+    // $ANTLR start rulename_path
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5821:1: rulename_path returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT | (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path ) ) ;
+    public final AntlrDatatypeRuleToken rulename_path() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token this_IDENT_1=null;
+        Token this_DOT_2=null;
+        AntlrDatatypeRuleToken this_name_path_3 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5827:6: ( (this_IDENT_0= RULE_IDENT | (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5828:1: (this_IDENT_0= RULE_IDENT | (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5828:1: (this_IDENT_0= RULE_IDENT | (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path ) )
+            int alt124=2;
+            int LA124_0 = input.LA(1);
+
+            if ( (LA124_0==RULE_IDENT) ) {
+                int LA124_1 = input.LA(2);
+
+                if ( (LA124_1==RULE_DOT) ) {
+                    alt124=2;
+                }
+                else if ( (LA124_1==EOF||(LA124_1>=RULE_SEMICOLON && LA124_1<=RULE_IDENT)||(LA124_1>=RULE_LPAR && LA124_1<=RULE_COMMA)||(LA124_1>=RULE_RPAR && LA124_1<=RULE_STRING)||LA124_1==RULE_LBRACK||LA124_1==91) ) {
+                    alt124=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("5828:1: (this_IDENT_0= RULE_IDENT | (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path ) )", 124, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("5828:1: (this_IDENT_0= RULE_IDENT | (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path ) )", 124, 0, input);
+
+                throw nvae;
+            }
+            switch (alt124) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5828:6: this_IDENT_0= RULE_IDENT
+                    {
+                    this_IDENT_0=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulename_path14239); 
+
+                    		current.merge(this_IDENT_0);
+                        
+                     
+                        createLeafNode(grammarAccess.getName_pathAccess().getIDENTTerminalRuleCall_0(), null); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5836:6: (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5836:6: (this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5836:11: this_IDENT_1= RULE_IDENT this_DOT_2= RULE_DOT this_name_path_3= rulename_path
+                    {
+                    this_IDENT_1=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulename_path14266); 
+
+                    		current.merge(this_IDENT_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getName_pathAccess().getIDENTTerminalRuleCall_1_0(), null); 
+                        
+                    this_DOT_2=(Token)input.LT(1);
+                    match(input,RULE_DOT,FOLLOW_RULE_DOT_in_rulename_path14286); 
+
+                    		current.merge(this_DOT_2);
+                        
+                     
+                        createLeafNode(grammarAccess.getName_pathAccess().getDOTTerminalRuleCall_1_1(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getName_pathAccess().getName_pathParserRuleCall_1_2(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulename_path_in_rulename_path14313);
+                    this_name_path_3=rulename_path();
+                    _fsp--;
+
+
+                    		current.merge(this_name_path_3);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulename_path
+
+
+    // $ANTLR start entryRulename_path_star
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5869:1: entryRulename_path_star returns [String current=null] : iv_rulename_path_star= rulename_path_star EOF ;
+    public final String entryRulename_path_star() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulename_path_star = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5869:55: (iv_rulename_path_star= rulename_path_star EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5870:2: iv_rulename_path_star= rulename_path_star EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getName_path_starRule(), currentNode); 
+            pushFollow(FOLLOW_rulename_path_star_in_entryRulename_path_star14358);
+            iv_rulename_path_star=rulename_path_star();
+            _fsp--;
+
+             current =iv_rulename_path_star.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulename_path_star14369); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulename_path_star
+
+
+    // $ANTLR start rulename_path_star
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5877:1: rulename_path_star returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? ) | (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star ) ) ;
+    public final AntlrDatatypeRuleToken rulename_path_star() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token this_STAR_EW_1=null;
+        Token this_IDENT_2=null;
+        Token this_DOT_3=null;
+        AntlrDatatypeRuleToken this_name_path_star_4 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5883:6: ( ( (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? ) | (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5884:1: ( (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? ) | (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5884:1: ( (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? ) | (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star ) )
+            int alt126=2;
+            int LA126_0 = input.LA(1);
+
+            if ( (LA126_0==RULE_IDENT) ) {
+                int LA126_1 = input.LA(2);
+
+                if ( (LA126_1==RULE_DOT) ) {
+                    alt126=2;
+                }
+                else if ( (LA126_1==EOF||LA126_1==RULE_SEMICOLON||LA126_1==RULE_STRING||LA126_1==RULE_STAR_EW||LA126_1==91) ) {
+                    alt126=1;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("5884:1: ( (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? ) | (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star ) )", 126, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("5884:1: ( (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? ) | (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star ) )", 126, 0, input);
+
+                throw nvae;
+            }
+            switch (alt126) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5884:2: (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5884:2: (this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5884:7: this_IDENT_0= RULE_IDENT (this_STAR_EW_1= RULE_STAR_EW )?
+                    {
+                    this_IDENT_0=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulename_path_star14410); 
+
+                    		current.merge(this_IDENT_0);
+                        
+                     
+                        createLeafNode(grammarAccess.getName_path_starAccess().getIDENTTerminalRuleCall_0_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5891:1: (this_STAR_EW_1= RULE_STAR_EW )?
+                    int alt125=2;
+                    int LA125_0 = input.LA(1);
+
+                    if ( (LA125_0==RULE_STAR_EW) ) {
+                        alt125=1;
+                    }
+                    switch (alt125) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5891:6: this_STAR_EW_1= RULE_STAR_EW
+                            {
+                            this_STAR_EW_1=(Token)input.LT(1);
+                            match(input,RULE_STAR_EW,FOLLOW_RULE_STAR_EW_in_rulename_path_star14431); 
+
+                            		current.merge(this_STAR_EW_1);
+                                
+                             
+                                createLeafNode(grammarAccess.getName_path_starAccess().getSTAR_EWTerminalRuleCall_0_1(), null); 
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5899:6: (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5899:6: (this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5899:11: this_IDENT_2= RULE_IDENT this_DOT_3= RULE_DOT this_name_path_star_4= rulename_path_star
+                    {
+                    this_IDENT_2=(Token)input.LT(1);
+                    match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulename_path_star14461); 
+
+                    		current.merge(this_IDENT_2);
+                        
+                     
+                        createLeafNode(grammarAccess.getName_path_starAccess().getIDENTTerminalRuleCall_1_0(), null); 
+                        
+                    this_DOT_3=(Token)input.LT(1);
+                    match(input,RULE_DOT,FOLLOW_RULE_DOT_in_rulename_path_star14481); 
+
+                    		current.merge(this_DOT_3);
+                        
+                     
+                        createLeafNode(grammarAccess.getName_path_starAccess().getDOTTerminalRuleCall_1_1(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getName_path_starAccess().getName_path_starParserRuleCall_1_2(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulename_path_star_in_rulename_path_star14508);
+                    this_name_path_star_4=rulename_path_star();
+                    _fsp--;
+
+
+                    		current.merge(this_name_path_star_4);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulename_path_star
+
+
+    // $ANTLR start entryRulecomponent_reference
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5932:1: entryRulecomponent_reference returns [String current=null] : iv_rulecomponent_reference= rulecomponent_reference EOF ;
+    public final String entryRulecomponent_reference() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulecomponent_reference = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5932:60: (iv_rulecomponent_reference= rulecomponent_reference EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5933:2: iv_rulecomponent_reference= rulecomponent_reference EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getComponent_referenceRule(), currentNode); 
+            pushFollow(FOLLOW_rulecomponent_reference_in_entryRulecomponent_reference14553);
+            iv_rulecomponent_reference=rulecomponent_reference();
+            _fsp--;
+
+             current =iv_rulecomponent_reference.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulecomponent_reference14564); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulecomponent_reference
+
+
+    // $ANTLR start rulecomponent_reference
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5940:1: rulecomponent_reference returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference )? ) ;
+    public final AntlrDatatypeRuleToken rulecomponent_reference() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token this_DOT_2=null;
+        AntlrDatatypeRuleToken this_array_subscripts_1 = null;
+
+        AntlrDatatypeRuleToken this_component_reference_3 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5946:6: ( (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5947:1: (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5947:1: (this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5947:6: this_IDENT_0= RULE_IDENT (this_array_subscripts_1= rulearray_subscripts )? (this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference )?
+            {
+            this_IDENT_0=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulecomponent_reference14604); 
+
+            		current.merge(this_IDENT_0);
+                
+             
+                createLeafNode(grammarAccess.getComponent_referenceAccess().getIDENTTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5954:1: (this_array_subscripts_1= rulearray_subscripts )?
+            int alt127=2;
+            int LA127_0 = input.LA(1);
+
+            if ( (LA127_0==RULE_LBRACK) ) {
+                alt127=1;
+            }
+            switch (alt127) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5955:5: this_array_subscripts_1= rulearray_subscripts
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getComponent_referenceAccess().getArray_subscriptsParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulearray_subscripts_in_rulecomponent_reference14632);
+                    this_array_subscripts_1=rulearray_subscripts();
+                    _fsp--;
+
+
+                    		current.merge(this_array_subscripts_1);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5965:3: (this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference )?
+            int alt128=2;
+            int LA128_0 = input.LA(1);
+
+            if ( (LA128_0==RULE_DOT) ) {
+                alt128=1;
+            }
+            switch (alt128) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5965:8: this_DOT_2= RULE_DOT this_component_reference_3= rulecomponent_reference
+                    {
+                    this_DOT_2=(Token)input.LT(1);
+                    match(input,RULE_DOT,FOLLOW_RULE_DOT_in_rulecomponent_reference14655); 
+
+                    		current.merge(this_DOT_2);
+                        
+                     
+                        createLeafNode(grammarAccess.getComponent_referenceAccess().getDOTTerminalRuleCall_2_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getComponent_referenceAccess().getComponent_referenceParserRuleCall_2_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulecomponent_reference_in_rulecomponent_reference14682);
+                    this_component_reference_3=rulecomponent_reference();
+                    _fsp--;
+
+
+                    		current.merge(this_component_reference_3);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulecomponent_reference
+
+
+    // $ANTLR start entryRulefunction_call
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5991:1: entryRulefunction_call returns [String current=null] : iv_rulefunction_call= rulefunction_call EOF ;
+    public final String entryRulefunction_call() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefunction_call = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5991:54: (iv_rulefunction_call= rulefunction_call EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5992:2: iv_rulefunction_call= rulefunction_call EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFunction_callRule(), currentNode); 
+            pushFollow(FOLLOW_rulefunction_call_in_entryRulefunction_call14728);
+            iv_rulefunction_call=rulefunction_call();
+            _fsp--;
+
+             current =iv_rulefunction_call.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefunction_call14739); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefunction_call
+
+
+    // $ANTLR start rulefunction_call
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:5999:1: rulefunction_call returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_LPAR_0= RULE_LPAR this_function_arguments_1= rulefunction_arguments this_RPAR_2= RULE_RPAR ) ;
+    public final AntlrDatatypeRuleToken rulefunction_call() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_LPAR_0=null;
+        Token this_RPAR_2=null;
+        AntlrDatatypeRuleToken this_function_arguments_1 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6005:6: ( (this_LPAR_0= RULE_LPAR this_function_arguments_1= rulefunction_arguments this_RPAR_2= RULE_RPAR ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6006:1: (this_LPAR_0= RULE_LPAR this_function_arguments_1= rulefunction_arguments this_RPAR_2= RULE_RPAR )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6006:1: (this_LPAR_0= RULE_LPAR this_function_arguments_1= rulefunction_arguments this_RPAR_2= RULE_RPAR )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6006:6: this_LPAR_0= RULE_LPAR this_function_arguments_1= rulefunction_arguments this_RPAR_2= RULE_RPAR
+            {
+            this_LPAR_0=(Token)input.LT(1);
+            match(input,RULE_LPAR,FOLLOW_RULE_LPAR_in_rulefunction_call14779); 
+
+            		current.merge(this_LPAR_0);
+                
+             
+                createLeafNode(grammarAccess.getFunction_callAccess().getLPARTerminalRuleCall_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getFunction_callAccess().getFunction_argumentsParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_rulefunction_arguments_in_rulefunction_call14806);
+            this_function_arguments_1=rulefunction_arguments();
+            _fsp--;
+
+
+            		current.merge(this_function_arguments_1);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            this_RPAR_2=(Token)input.LT(1);
+            match(input,RULE_RPAR,FOLLOW_RULE_RPAR_in_rulefunction_call14826); 
+
+            		current.merge(this_RPAR_2);
+                
+             
+                createLeafNode(grammarAccess.getFunction_callAccess().getRPARTerminalRuleCall_2(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefunction_call
+
+
+    // $ANTLR start entryRulefunction_arguments
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6039:1: entryRulefunction_arguments returns [String current=null] : iv_rulefunction_arguments= rulefunction_arguments EOF ;
+    public final String entryRulefunction_arguments() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefunction_arguments = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6039:59: (iv_rulefunction_arguments= rulefunction_arguments EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6040:2: iv_rulefunction_arguments= rulefunction_arguments EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFunction_argumentsRule(), currentNode); 
+            pushFollow(FOLLOW_rulefunction_arguments_in_entryRulefunction_arguments14870);
+            iv_rulefunction_arguments=rulefunction_arguments();
+            _fsp--;
+
+             current =iv_rulefunction_arguments.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefunction_arguments14881); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefunction_arguments
+
+
+    // $ANTLR start rulefunction_arguments
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6047:1: rulefunction_arguments returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (this_for_or_expression_list_0= rulefor_or_expression_list )? (this_named_arguments_1= rulenamed_arguments )? ) ;
+    public final AntlrDatatypeRuleToken rulefunction_arguments() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        AntlrDatatypeRuleToken this_for_or_expression_list_0 = null;
+
+        AntlrDatatypeRuleToken this_named_arguments_1 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6053:6: ( ( (this_for_or_expression_list_0= rulefor_or_expression_list )? (this_named_arguments_1= rulenamed_arguments )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6054:1: ( (this_for_or_expression_list_0= rulefor_or_expression_list )? (this_named_arguments_1= rulenamed_arguments )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6054:1: ( (this_for_or_expression_list_0= rulefor_or_expression_list )? (this_named_arguments_1= rulenamed_arguments )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6054:2: (this_for_or_expression_list_0= rulefor_or_expression_list )? (this_named_arguments_1= rulenamed_arguments )?
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6054:2: (this_for_or_expression_list_0= rulefor_or_expression_list )?
+            int alt129=2;
+            int LA129_0 = input.LA(1);
+
+            if ( (LA129_0==RULE_LPAR||LA129_0==RULE_STRING||(LA129_0>=RULE_PLUS && LA129_0<=RULE_MINUS_EW)||(LA129_0>=RULE_UNSIGNED_INTEGER && LA129_0<=RULE_LBRACK)||LA129_0==RULE_LBRACE||LA129_0==48||LA129_0==50||LA129_0==69||LA129_0==73||(LA129_0>=88 && LA129_0<=90)) ) {
+                alt129=1;
+            }
+            else if ( (LA129_0==RULE_IDENT) ) {
+                int LA129_2 = input.LA(2);
+
+                if ( (LA129_2==EOF||LA129_2==RULE_IDENT||(LA129_2>=RULE_LPAR && LA129_2<=RULE_RPAR)||(LA129_2>=RULE_DOT && LA129_2<=RULE_POWER_EW)||LA129_2==RULE_LBRACK||LA129_2==78||(LA129_2>=86 && LA129_2<=87)) ) {
+                    alt129=1;
+                }
+            }
+            switch (alt129) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6055:5: this_for_or_expression_list_0= rulefor_or_expression_list
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getFunction_argumentsAccess().getFor_or_expression_listParserRuleCall_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefor_or_expression_list_in_rulefunction_arguments14929);
+                    this_for_or_expression_list_0=rulefor_or_expression_list();
+                    _fsp--;
+
+
+                    		current.merge(this_for_or_expression_list_0);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6065:3: (this_named_arguments_1= rulenamed_arguments )?
+            int alt130=2;
+            int LA130_0 = input.LA(1);
+
+            if ( (LA130_0==RULE_IDENT) ) {
+                alt130=1;
+            }
+            switch (alt130) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6066:5: this_named_arguments_1= rulenamed_arguments
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getFunction_argumentsAccess().getNamed_argumentsParserRuleCall_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulenamed_arguments_in_rulefunction_arguments14959);
+                    this_named_arguments_1=rulenamed_arguments();
+                    _fsp--;
+
+
+                    		current.merge(this_named_arguments_1);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefunction_arguments
+
+
+    // $ANTLR start entryRulefor_or_expression_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6084:1: entryRulefor_or_expression_list returns [String current=null] : iv_rulefor_or_expression_list= rulefor_or_expression_list EOF ;
+    public final String entryRulefor_or_expression_list() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefor_or_expression_list = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6084:63: (iv_rulefor_or_expression_list= rulefor_or_expression_list EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6085:2: iv_rulefor_or_expression_list= rulefor_or_expression_list EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFor_or_expression_listRule(), currentNode); 
+            pushFollow(FOLLOW_rulefor_or_expression_list_in_entryRulefor_or_expression_list15005);
+            iv_rulefor_or_expression_list=rulefor_or_expression_list();
+            _fsp--;
+
+             current =iv_rulefor_or_expression_list.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefor_or_expression_list15016); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefor_or_expression_list
+
+
+    // $ANTLR start rulefor_or_expression_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6092:1: rulefor_or_expression_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_expression_0= ruleexpression ( (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) | (kw= 'for' this_for_indices_4= rulefor_indices ) )? ) ;
+    public final AntlrDatatypeRuleToken rulefor_or_expression_list() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COMMA_1=null;
+        Token kw=null;
+        AntlrDatatypeRuleToken this_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_for_or_expression_list2_2 = null;
+
+        AntlrDatatypeRuleToken this_for_indices_4 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6098:6: ( (this_expression_0= ruleexpression ( (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) | (kw= 'for' this_for_indices_4= rulefor_indices ) )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6099:1: (this_expression_0= ruleexpression ( (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) | (kw= 'for' this_for_indices_4= rulefor_indices ) )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6099:1: (this_expression_0= ruleexpression ( (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) | (kw= 'for' this_for_indices_4= rulefor_indices ) )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6100:5: this_expression_0= ruleexpression ( (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) | (kw= 'for' this_for_indices_4= rulefor_indices ) )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getFor_or_expression_listAccess().getExpressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_rulefor_or_expression_list15063);
+            this_expression_0=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6110:1: ( (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) | (kw= 'for' this_for_indices_4= rulefor_indices ) )?
+            int alt132=3;
+            int LA132_0 = input.LA(1);
+
+            if ( (LA132_0==RULE_COMMA) ) {
+                alt132=1;
+            }
+            else if ( (LA132_0==78) ) {
+                alt132=2;
+            }
+            switch (alt132) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6110:2: (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6110:2: (this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )? )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6110:7: this_COMMA_1= RULE_COMMA (this_for_or_expression_list2_2= rulefor_or_expression_list2 )?
+                    {
+                    this_COMMA_1=(Token)input.LT(1);
+                    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulefor_or_expression_list15085); 
+
+                    		current.merge(this_COMMA_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getFor_or_expression_listAccess().getCOMMATerminalRuleCall_1_0_0(), null); 
+                        
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6117:1: (this_for_or_expression_list2_2= rulefor_or_expression_list2 )?
+                    int alt131=2;
+                    int LA131_0 = input.LA(1);
+
+                    if ( (LA131_0==RULE_LPAR||LA131_0==RULE_STRING||(LA131_0>=RULE_PLUS && LA131_0<=RULE_MINUS_EW)||(LA131_0>=RULE_UNSIGNED_INTEGER && LA131_0<=RULE_LBRACK)||LA131_0==RULE_LBRACE||LA131_0==48||LA131_0==50||LA131_0==69||LA131_0==73||(LA131_0>=88 && LA131_0<=90)) ) {
+                        alt131=1;
+                    }
+                    else if ( (LA131_0==RULE_IDENT) ) {
+                        int LA131_2 = input.LA(2);
+
+                        if ( (LA131_2==EOF||LA131_2==RULE_IDENT||(LA131_2>=RULE_LPAR && LA131_2<=RULE_RPAR)||(LA131_2>=RULE_DOT && LA131_2<=RULE_POWER_EW)||LA131_2==RULE_LBRACK||LA131_2==RULE_RBRACE||(LA131_2>=86 && LA131_2<=87)) ) {
+                            alt131=1;
+                        }
+                    }
+                    switch (alt131) {
+                        case 1 :
+                            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6118:5: this_for_or_expression_list2_2= rulefor_or_expression_list2
+                            {
+                             
+                                    currentNode=createCompositeNode(grammarAccess.getFor_or_expression_listAccess().getFor_or_expression_list2ParserRuleCall_1_0_1(), currentNode); 
+                                
+                            pushFollow(FOLLOW_rulefor_or_expression_list2_in_rulefor_or_expression_list15113);
+                            this_for_or_expression_list2_2=rulefor_or_expression_list2();
+                            _fsp--;
+
+
+                            		current.merge(this_for_or_expression_list2_2);
+                                
+                             
+                                    currentNode = currentNode.getParent();
+                                
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6129:6: (kw= 'for' this_for_indices_4= rulefor_indices )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6129:6: (kw= 'for' this_for_indices_4= rulefor_indices )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6130:2: kw= 'for' this_for_indices_4= rulefor_indices
+                    {
+                    kw=(Token)input.LT(1);
+                    match(input,78,FOLLOW_78_in_rulefor_or_expression_list15141); 
+
+                            current.merge(kw);
+                            createLeafNode(grammarAccess.getFor_or_expression_listAccess().getForKeyword_1_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getFor_or_expression_listAccess().getFor_indicesParserRuleCall_1_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefor_indices_in_rulefor_or_expression_list15163);
+                    this_for_indices_4=rulefor_indices();
+                    _fsp--;
+
+
+                    		current.merge(this_for_indices_4);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefor_or_expression_list
+
+
+    // $ANTLR start entryRulefor_or_expression_list2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6154:1: entryRulefor_or_expression_list2 returns [String current=null] : iv_rulefor_or_expression_list2= rulefor_or_expression_list2 EOF ;
+    public final String entryRulefor_or_expression_list2() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulefor_or_expression_list2 = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6154:64: (iv_rulefor_or_expression_list2= rulefor_or_expression_list2 EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6155:2: iv_rulefor_or_expression_list2= rulefor_or_expression_list2 EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getFor_or_expression_list2Rule(), currentNode); 
+            pushFollow(FOLLOW_rulefor_or_expression_list2_in_entryRulefor_or_expression_list215210);
+            iv_rulefor_or_expression_list2=rulefor_or_expression_list2();
+            _fsp--;
+
+             current =iv_rulefor_or_expression_list2.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulefor_or_expression_list215221); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulefor_or_expression_list2
+
+
+    // $ANTLR start rulefor_or_expression_list2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6162:1: rulefor_or_expression_list2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) ;
+    public final AntlrDatatypeRuleToken rulefor_or_expression_list2() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COMMA_1=null;
+        AntlrDatatypeRuleToken this_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_for_or_expression_list2_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6168:6: ( (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2 )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6169:1: (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2 )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6169:1: (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2 )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6170:5: this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2 )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getFor_or_expression_list2Access().getExpressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_rulefor_or_expression_list215268);
+            this_expression_0=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6180:1: (this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2 )?
+            int alt133=2;
+            int LA133_0 = input.LA(1);
+
+            if ( (LA133_0==RULE_COMMA) ) {
+                alt133=1;
+            }
+            switch (alt133) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6180:6: this_COMMA_1= RULE_COMMA this_for_or_expression_list2_2= rulefor_or_expression_list2
+                    {
+                    this_COMMA_1=(Token)input.LT(1);
+                    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulefor_or_expression_list215289); 
+
+                    		current.merge(this_COMMA_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getFor_or_expression_list2Access().getCOMMATerminalRuleCall_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getFor_or_expression_list2Access().getFor_or_expression_list2ParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_rulefor_or_expression_list2_in_rulefor_or_expression_list215316);
+                    this_for_or_expression_list2_2=rulefor_or_expression_list2();
+                    _fsp--;
+
+
+                    		current.merge(this_for_or_expression_list2_2);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulefor_or_expression_list2
+
+
+    // $ANTLR start entryRulenamed_arguments
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6206:1: entryRulenamed_arguments returns [String current=null] : iv_rulenamed_arguments= rulenamed_arguments EOF ;
+    public final String entryRulenamed_arguments() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulenamed_arguments = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6206:56: (iv_rulenamed_arguments= rulenamed_arguments EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6207:2: iv_rulenamed_arguments= rulenamed_arguments EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getNamed_argumentsRule(), currentNode); 
+            pushFollow(FOLLOW_rulenamed_arguments_in_entryRulenamed_arguments15362);
+            iv_rulenamed_arguments=rulenamed_arguments();
+            _fsp--;
+
+             current =iv_rulenamed_arguments.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulenamed_arguments15373); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulenamed_arguments
+
+
+    // $ANTLR start rulenamed_arguments
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6214:1: rulenamed_arguments returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_named_arguments2_0= rulenamed_arguments2 ;
+    public final AntlrDatatypeRuleToken rulenamed_arguments() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        AntlrDatatypeRuleToken this_named_arguments2_0 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6220:6: (this_named_arguments2_0= rulenamed_arguments2 )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6222:5: this_named_arguments2_0= rulenamed_arguments2
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getNamed_argumentsAccess().getNamed_arguments2ParserRuleCall(), currentNode); 
+                
+            pushFollow(FOLLOW_rulenamed_arguments2_in_rulenamed_arguments15419);
+            this_named_arguments2_0=rulenamed_arguments2();
+            _fsp--;
+
+
+            		current.merge(this_named_arguments2_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulenamed_arguments
+
+
+    // $ANTLR start entryRulenamed_arguments2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6240:1: entryRulenamed_arguments2 returns [String current=null] : iv_rulenamed_arguments2= rulenamed_arguments2 EOF ;
+    public final String entryRulenamed_arguments2() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulenamed_arguments2 = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6240:57: (iv_rulenamed_arguments2= rulenamed_arguments2 EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6241:2: iv_rulenamed_arguments2= rulenamed_arguments2 EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getNamed_arguments2Rule(), currentNode); 
+            pushFollow(FOLLOW_rulenamed_arguments2_in_entryRulenamed_arguments215462);
+            iv_rulenamed_arguments2=rulenamed_arguments2();
+            _fsp--;
+
+             current =iv_rulenamed_arguments2.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulenamed_arguments215473); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulenamed_arguments2
+
+
+    // $ANTLR start rulenamed_arguments2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6248:1: rulenamed_arguments2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_named_argument_0= rulenamed_argument (this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument )* ) ;
+    public final AntlrDatatypeRuleToken rulenamed_arguments2() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COMMA_1=null;
+        AntlrDatatypeRuleToken this_named_argument_0 = null;
+
+        AntlrDatatypeRuleToken this_named_argument_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6254:6: ( (this_named_argument_0= rulenamed_argument (this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6255:1: (this_named_argument_0= rulenamed_argument (this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6255:1: (this_named_argument_0= rulenamed_argument (this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6256:5: this_named_argument_0= rulenamed_argument (this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument )*
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getNamed_arguments2Access().getNamed_argumentParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_rulenamed_argument_in_rulenamed_arguments215520);
+            this_named_argument_0=rulenamed_argument();
+            _fsp--;
+
+
+            		current.merge(this_named_argument_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6266:1: (this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument )*
+            loop134:
+            do {
+                int alt134=2;
+                int LA134_0 = input.LA(1);
+
+                if ( (LA134_0==RULE_COMMA) ) {
+                    alt134=1;
+                }
+
+
+                switch (alt134) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6266:6: this_COMMA_1= RULE_COMMA this_named_argument_2= rulenamed_argument
+            	    {
+            	    this_COMMA_1=(Token)input.LT(1);
+            	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulenamed_arguments215541); 
+
+            	    		current.merge(this_COMMA_1);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getNamed_arguments2Access().getCOMMATerminalRuleCall_1_0(), null); 
+            	        
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getNamed_arguments2Access().getNamed_argumentParserRuleCall_1_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulenamed_argument_in_rulenamed_arguments215568);
+            	    this_named_argument_2=rulenamed_argument();
+            	    _fsp--;
+
+
+            	    		current.merge(this_named_argument_2);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop134;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulenamed_arguments2
+
+
+    // $ANTLR start entryRulenamed_argument
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6292:1: entryRulenamed_argument returns [String current=null] : iv_rulenamed_argument= rulenamed_argument EOF ;
+    public final String entryRulenamed_argument() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulenamed_argument = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6292:55: (iv_rulenamed_argument= rulenamed_argument EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6293:2: iv_rulenamed_argument= rulenamed_argument EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getNamed_argumentRule(), currentNode); 
+            pushFollow(FOLLOW_rulenamed_argument_in_entryRulenamed_argument15614);
+            iv_rulenamed_argument=rulenamed_argument();
+            _fsp--;
+
+             current =iv_rulenamed_argument.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulenamed_argument15625); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulenamed_argument
+
+
+    // $ANTLR start rulenamed_argument
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6300:1: rulenamed_argument returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_IDENT_0= RULE_IDENT this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression ) ;
+    public final AntlrDatatypeRuleToken rulenamed_argument() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_IDENT_0=null;
+        Token this_EQUALS_1=null;
+        AntlrDatatypeRuleToken this_expression_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6306:6: ( (this_IDENT_0= RULE_IDENT this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6307:1: (this_IDENT_0= RULE_IDENT this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6307:1: (this_IDENT_0= RULE_IDENT this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6307:6: this_IDENT_0= RULE_IDENT this_EQUALS_1= RULE_EQUALS this_expression_2= ruleexpression
+            {
+            this_IDENT_0=(Token)input.LT(1);
+            match(input,RULE_IDENT,FOLLOW_RULE_IDENT_in_rulenamed_argument15665); 
+
+            		current.merge(this_IDENT_0);
+                
+             
+                createLeafNode(grammarAccess.getNamed_argumentAccess().getIDENTTerminalRuleCall_0(), null); 
+                
+            this_EQUALS_1=(Token)input.LT(1);
+            match(input,RULE_EQUALS,FOLLOW_RULE_EQUALS_in_rulenamed_argument15685); 
+
+            		current.merge(this_EQUALS_1);
+                
+             
+                createLeafNode(grammarAccess.getNamed_argumentAccess().getEQUALSTerminalRuleCall_1(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getNamed_argumentAccess().getExpressionParserRuleCall_2(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_rulenamed_argument15712);
+            this_expression_2=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_2);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulenamed_argument
+
+
+    // $ANTLR start entryRuleexpression_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6340:1: entryRuleexpression_list returns [String current=null] : iv_ruleexpression_list= ruleexpression_list EOF ;
+    public final String entryRuleexpression_list() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleexpression_list = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6340:56: (iv_ruleexpression_list= ruleexpression_list EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6341:2: iv_ruleexpression_list= ruleexpression_list EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getExpression_listRule(), currentNode); 
+            pushFollow(FOLLOW_ruleexpression_list_in_entryRuleexpression_list15756);
+            iv_ruleexpression_list=ruleexpression_list();
+            _fsp--;
+
+             current =iv_ruleexpression_list.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleexpression_list15767); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleexpression_list
+
+
+    // $ANTLR start ruleexpression_list
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6348:1: ruleexpression_list returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_expression_list2_0= ruleexpression_list2 ;
+    public final AntlrDatatypeRuleToken ruleexpression_list() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        AntlrDatatypeRuleToken this_expression_list2_0 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6354:6: (this_expression_list2_0= ruleexpression_list2 )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6356:5: this_expression_list2_0= ruleexpression_list2
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getExpression_listAccess().getExpression_list2ParserRuleCall(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_list2_in_ruleexpression_list15813);
+            this_expression_list2_0=ruleexpression_list2();
+            _fsp--;
+
+
+            		current.merge(this_expression_list2_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleexpression_list
+
+
+    // $ANTLR start entryRuleexpression_list2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6374:1: entryRuleexpression_list2 returns [String current=null] : iv_ruleexpression_list2= ruleexpression_list2 EOF ;
+    public final String entryRuleexpression_list2() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleexpression_list2 = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6374:57: (iv_ruleexpression_list2= ruleexpression_list2 EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6375:2: iv_ruleexpression_list2= ruleexpression_list2 EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getExpression_list2Rule(), currentNode); 
+            pushFollow(FOLLOW_ruleexpression_list2_in_entryRuleexpression_list215856);
+            iv_ruleexpression_list2=ruleexpression_list2();
+            _fsp--;
+
+             current =iv_ruleexpression_list2.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleexpression_list215867); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleexpression_list2
+
+
+    // $ANTLR start ruleexpression_list2
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6382:1: ruleexpression_list2 returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2 )? ) ;
+    public final AntlrDatatypeRuleToken ruleexpression_list2() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COMMA_1=null;
+        AntlrDatatypeRuleToken this_expression_0 = null;
+
+        AntlrDatatypeRuleToken this_expression_list2_2 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6388:6: ( (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2 )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6389:1: (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2 )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6389:1: (this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2 )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6390:5: this_expression_0= ruleexpression (this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2 )?
+            {
+             
+                    currentNode=createCompositeNode(grammarAccess.getExpression_list2Access().getExpressionParserRuleCall_0(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleexpression_in_ruleexpression_list215914);
+            this_expression_0=ruleexpression();
+            _fsp--;
+
+
+            		current.merge(this_expression_0);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6400:1: (this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2 )?
+            int alt135=2;
+            int LA135_0 = input.LA(1);
+
+            if ( (LA135_0==RULE_COMMA) ) {
+                alt135=1;
+            }
+            switch (alt135) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6400:6: this_COMMA_1= RULE_COMMA this_expression_list2_2= ruleexpression_list2
+                    {
+                    this_COMMA_1=(Token)input.LT(1);
+                    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_ruleexpression_list215935); 
+
+                    		current.merge(this_COMMA_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getExpression_list2Access().getCOMMATerminalRuleCall_1_0(), null); 
+                        
+                     
+                            currentNode=createCompositeNode(grammarAccess.getExpression_list2Access().getExpression_list2ParserRuleCall_1_1(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_list2_in_ruleexpression_list215962);
+                    this_expression_list2_2=ruleexpression_list2();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_list2_2);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleexpression_list2
+
+
+    // $ANTLR start entryRulearray_subscripts
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6426:1: entryRulearray_subscripts returns [String current=null] : iv_rulearray_subscripts= rulearray_subscripts EOF ;
+    public final String entryRulearray_subscripts() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulearray_subscripts = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6426:57: (iv_rulearray_subscripts= rulearray_subscripts EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6427:2: iv_rulearray_subscripts= rulearray_subscripts EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getArray_subscriptsRule(), currentNode); 
+            pushFollow(FOLLOW_rulearray_subscripts_in_entryRulearray_subscripts16008);
+            iv_rulearray_subscripts=rulearray_subscripts();
+            _fsp--;
+
+             current =iv_rulearray_subscripts.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulearray_subscripts16019); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulearray_subscripts
+
+
+    // $ANTLR start rulearray_subscripts
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6434:1: rulearray_subscripts returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_LBRACK_0= RULE_LBRACK this_subscript_1= rulesubscript (this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript )* this_RBRACK_4= RULE_RBRACK ) ;
+    public final AntlrDatatypeRuleToken rulearray_subscripts() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_LBRACK_0=null;
+        Token this_COMMA_2=null;
+        Token this_RBRACK_4=null;
+        AntlrDatatypeRuleToken this_subscript_1 = null;
+
+        AntlrDatatypeRuleToken this_subscript_3 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6440:6: ( (this_LBRACK_0= RULE_LBRACK this_subscript_1= rulesubscript (this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript )* this_RBRACK_4= RULE_RBRACK ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6441:1: (this_LBRACK_0= RULE_LBRACK this_subscript_1= rulesubscript (this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript )* this_RBRACK_4= RULE_RBRACK )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6441:1: (this_LBRACK_0= RULE_LBRACK this_subscript_1= rulesubscript (this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript )* this_RBRACK_4= RULE_RBRACK )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6441:6: this_LBRACK_0= RULE_LBRACK this_subscript_1= rulesubscript (this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript )* this_RBRACK_4= RULE_RBRACK
+            {
+            this_LBRACK_0=(Token)input.LT(1);
+            match(input,RULE_LBRACK,FOLLOW_RULE_LBRACK_in_rulearray_subscripts16059); 
+
+            		current.merge(this_LBRACK_0);
+                
+             
+                createLeafNode(grammarAccess.getArray_subscriptsAccess().getLBRACKTerminalRuleCall_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getArray_subscriptsAccess().getSubscriptParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_rulesubscript_in_rulearray_subscripts16086);
+            this_subscript_1=rulesubscript();
+            _fsp--;
+
+
+            		current.merge(this_subscript_1);
+                
+             
+                    currentNode = currentNode.getParent();
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6459:1: (this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript )*
+            loop136:
+            do {
+                int alt136=2;
+                int LA136_0 = input.LA(1);
+
+                if ( (LA136_0==RULE_COMMA) ) {
+                    alt136=1;
+                }
+
+
+                switch (alt136) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6459:6: this_COMMA_2= RULE_COMMA this_subscript_3= rulesubscript
+            	    {
+            	    this_COMMA_2=(Token)input.LT(1);
+            	    match(input,RULE_COMMA,FOLLOW_RULE_COMMA_in_rulearray_subscripts16107); 
+
+            	    		current.merge(this_COMMA_2);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getArray_subscriptsAccess().getCOMMATerminalRuleCall_2_0(), null); 
+            	        
+            	     
+            	            currentNode=createCompositeNode(grammarAccess.getArray_subscriptsAccess().getSubscriptParserRuleCall_2_1(), currentNode); 
+            	        
+            	    pushFollow(FOLLOW_rulesubscript_in_rulearray_subscripts16134);
+            	    this_subscript_3=rulesubscript();
+            	    _fsp--;
+
+
+            	    		current.merge(this_subscript_3);
+            	        
+            	     
+            	            currentNode = currentNode.getParent();
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop136;
+                }
+            } while (true);
+
+            this_RBRACK_4=(Token)input.LT(1);
+            match(input,RULE_RBRACK,FOLLOW_RULE_RBRACK_in_rulearray_subscripts16156); 
+
+            		current.merge(this_RBRACK_4);
+                
+             
+                createLeafNode(grammarAccess.getArray_subscriptsAccess().getRBRACKTerminalRuleCall_3(), null); 
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulearray_subscripts
+
+
+    // $ANTLR start entryRulesubscript
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6492:1: entryRulesubscript returns [String current=null] : iv_rulesubscript= rulesubscript EOF ;
+    public final String entryRulesubscript() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulesubscript = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6492:50: (iv_rulesubscript= rulesubscript EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6493:2: iv_rulesubscript= rulesubscript EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getSubscriptRule(), currentNode); 
+            pushFollow(FOLLOW_rulesubscript_in_entryRulesubscript16200);
+            iv_rulesubscript=rulesubscript();
+            _fsp--;
+
+             current =iv_rulesubscript.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulesubscript16211); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulesubscript
+
+
+    // $ANTLR start rulesubscript
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6500:1: rulesubscript returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_expression_0= ruleexpression | this_COLON_1= RULE_COLON ) ;
+    public final AntlrDatatypeRuleToken rulesubscript() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_COLON_1=null;
+        AntlrDatatypeRuleToken this_expression_0 = null;
+
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6506:6: ( (this_expression_0= ruleexpression | this_COLON_1= RULE_COLON ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6507:1: (this_expression_0= ruleexpression | this_COLON_1= RULE_COLON )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6507:1: (this_expression_0= ruleexpression | this_COLON_1= RULE_COLON )
+            int alt137=2;
+            int LA137_0 = input.LA(1);
+
+            if ( (LA137_0==RULE_IDENT||LA137_0==RULE_LPAR||LA137_0==RULE_STRING||(LA137_0>=RULE_PLUS && LA137_0<=RULE_MINUS_EW)||(LA137_0>=RULE_UNSIGNED_INTEGER && LA137_0<=RULE_LBRACK)||LA137_0==RULE_LBRACE||LA137_0==48||LA137_0==50||LA137_0==69||LA137_0==73||(LA137_0>=88 && LA137_0<=90)) ) {
+                alt137=1;
+            }
+            else if ( (LA137_0==RULE_COLON) ) {
+                alt137=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("6507:1: (this_expression_0= ruleexpression | this_COLON_1= RULE_COLON )", 137, 0, input);
+
+                throw nvae;
+            }
+            switch (alt137) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6508:5: this_expression_0= ruleexpression
+                    {
+                     
+                            currentNode=createCompositeNode(grammarAccess.getSubscriptAccess().getExpressionParserRuleCall_0(), currentNode); 
+                        
+                    pushFollow(FOLLOW_ruleexpression_in_rulesubscript16258);
+                    this_expression_0=ruleexpression();
+                    _fsp--;
+
+
+                    		current.merge(this_expression_0);
+                        
+                     
+                            currentNode = currentNode.getParent();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6519:10: this_COLON_1= RULE_COLON
+                    {
+                    this_COLON_1=(Token)input.LT(1);
+                    match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rulesubscript16284); 
+
+                    		current.merge(this_COLON_1);
+                        
+                     
+                        createLeafNode(grammarAccess.getSubscriptAccess().getCOLONTerminalRuleCall_1(), null); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulesubscript
+
+
+    // $ANTLR start entryRulecomment
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6534:1: entryRulecomment returns [EObject current=null] : iv_rulecomment= rulecomment EOF ;
+    public final EObject entryRulecomment() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulecomment = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6534:49: (iv_rulecomment= rulecomment EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6535:2: iv_rulecomment= rulecomment EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getCommentRule(), currentNode); 
+            pushFollow(FOLLOW_rulecomment_in_entryRulecomment16327);
+            iv_rulecomment=rulecomment();
+            _fsp--;
+
+             current =iv_rulecomment; 
+            match(input,EOF,FOLLOW_EOF_in_entryRulecomment16337); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulecomment
+
+
+    // $ANTLR start rulecomment
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6542:1: rulecomment returns [EObject current=null] : ( (lv_string_0= rulestring_comment )? (lv_annotation_1= ruleannotation )? ) ;
+    public final EObject rulecomment() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_string_0 = null;
+
+        EObject lv_annotation_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6547:6: ( ( (lv_string_0= rulestring_comment )? (lv_annotation_1= ruleannotation )? ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6548:1: ( (lv_string_0= rulestring_comment )? (lv_annotation_1= ruleannotation )? )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6548:1: ( (lv_string_0= rulestring_comment )? (lv_annotation_1= ruleannotation )? )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6548:2: (lv_string_0= rulestring_comment )? (lv_annotation_1= ruleannotation )?
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6548:2: (lv_string_0= rulestring_comment )?
+            int alt138=2;
+            int LA138_0 = input.LA(1);
+
+            if ( (LA138_0==RULE_STRING) ) {
+                alt138=1;
+            }
+            switch (alt138) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6551:6: lv_string_0= rulestring_comment
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getCommentAccess().getStringString_commentParserRuleCall_0_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_rulestring_comment_in_rulecomment16396);
+                    lv_string_0=rulestring_comment();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getCommentRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "string", lv_string_0, "string_comment", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6569:3: (lv_annotation_1= ruleannotation )?
+            int alt139=2;
+            int LA139_0 = input.LA(1);
+
+            if ( (LA139_0==91) ) {
+                alt139=1;
+            }
+            switch (alt139) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6572:6: lv_annotation_1= ruleannotation
+                    {
+                     
+                    	        currentNode=createCompositeNode(grammarAccess.getCommentAccess().getAnnotationAnnotationParserRuleCall_1_0(), currentNode); 
+                    	    
+                    pushFollow(FOLLOW_ruleannotation_in_rulecomment16435);
+                    lv_annotation_1=ruleannotation();
+                    _fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = factory.create(grammarAccess.getCommentRule().getType().getClassifier());
+                    	            associateNodeWithAstElement(currentNode.getParent(), current);
+                    	        }
+                    	        
+                    	        try {
+                    	       		set(current, "annotation", lv_annotation_1, "annotation", currentNode);
+                    	        } catch (ValueConverterException vce) {
+                    				handleValueConverterException(vce);
+                    	        }
+                    	        currentNode = currentNode.getParent();
+                    	    
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulecomment
+
+
+    // $ANTLR start entryRulestring_comment
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6597:1: entryRulestring_comment returns [String current=null] : iv_rulestring_comment= rulestring_comment EOF ;
+    public final String entryRulestring_comment() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_rulestring_comment = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6597:55: (iv_rulestring_comment= rulestring_comment EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6598:2: iv_rulestring_comment= rulestring_comment EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getString_commentRule(), currentNode); 
+            pushFollow(FOLLOW_rulestring_comment_in_entryRulestring_comment16474);
+            iv_rulestring_comment=rulestring_comment();
+            _fsp--;
+
+             current =iv_rulestring_comment.getText(); 
+            match(input,EOF,FOLLOW_EOF_in_entryRulestring_comment16485); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRulestring_comment
+
+
+    // $ANTLR start rulestring_comment
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6605:1: rulestring_comment returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING (this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING )* ) ;
+    public final AntlrDatatypeRuleToken rulestring_comment() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_STRING_0=null;
+        Token this_PLUS_1=null;
+        Token this_STRING_2=null;
+
+         setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6611:6: ( (this_STRING_0= RULE_STRING (this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING )* ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6612:1: (this_STRING_0= RULE_STRING (this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING )* )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6612:1: (this_STRING_0= RULE_STRING (this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING )* )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6612:6: this_STRING_0= RULE_STRING (this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING )*
+            {
+            this_STRING_0=(Token)input.LT(1);
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulestring_comment16525); 
+
+            		current.merge(this_STRING_0);
+                
+             
+                createLeafNode(grammarAccess.getString_commentAccess().getSTRINGTerminalRuleCall_0(), null); 
+                
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6619:1: (this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING )*
+            loop140:
+            do {
+                int alt140=2;
+                int LA140_0 = input.LA(1);
+
+                if ( (LA140_0==RULE_PLUS) ) {
+                    alt140=1;
+                }
+
+
+                switch (alt140) {
+            	case 1 :
+            	    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6619:6: this_PLUS_1= RULE_PLUS this_STRING_2= RULE_STRING
+            	    {
+            	    this_PLUS_1=(Token)input.LT(1);
+            	    match(input,RULE_PLUS,FOLLOW_RULE_PLUS_in_rulestring_comment16546); 
+
+            	    		current.merge(this_PLUS_1);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getString_commentAccess().getPLUSTerminalRuleCall_1_0(), null); 
+            	        
+            	    this_STRING_2=(Token)input.LT(1);
+            	    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rulestring_comment16566); 
+
+            	    		current.merge(this_STRING_2);
+            	        
+            	     
+            	        createLeafNode(grammarAccess.getString_commentAccess().getSTRINGTerminalRuleCall_1_1(), null); 
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop140;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+            	    lastConsumedNode = currentNode;
+            	    lastConsumedDatatypeToken = current;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end rulestring_comment
+
+
+    // $ANTLR start entryRuleannotation
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6641:1: entryRuleannotation returns [EObject current=null] : iv_ruleannotation= ruleannotation EOF ;
+    public final EObject entryRuleannotation() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleannotation = null;
+
+
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6641:52: (iv_ruleannotation= ruleannotation EOF )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6642:2: iv_ruleannotation= ruleannotation EOF
+            {
+             currentNode = createCompositeNode(grammarAccess.getAnnotationRule(), currentNode); 
+            pushFollow(FOLLOW_ruleannotation_in_entryRuleannotation16611);
+            iv_ruleannotation=ruleannotation();
+            _fsp--;
+
+             current =iv_ruleannotation; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleannotation16621); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end entryRuleannotation
+
+
+    // $ANTLR start ruleannotation
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6649:1: ruleannotation returns [EObject current=null] : ( 'annotation' this_class_modification_1= ruleclass_modification ) ;
+    public final EObject ruleannotation() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_class_modification_1 = null;
+
+
+         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
+            
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6654:6: ( ( 'annotation' this_class_modification_1= ruleclass_modification ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6655:1: ( 'annotation' this_class_modification_1= ruleclass_modification )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6655:1: ( 'annotation' this_class_modification_1= ruleclass_modification )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6655:2: 'annotation' this_class_modification_1= ruleclass_modification
+            {
+            match(input,91,FOLLOW_91_in_ruleannotation16655); 
+
+                    createLeafNode(grammarAccess.getAnnotationAccess().getAnnotationKeyword_0(), null); 
+                
+             
+                    currentNode=createCompositeNode(grammarAccess.getAnnotationAccess().getClass_modificationParserRuleCall_1(), currentNode); 
+                
+            pushFollow(FOLLOW_ruleclass_modification_in_ruleannotation16677);
+            this_class_modification_1=ruleclass_modification();
+            _fsp--;
+
+             
+                    current = this_class_modification_1; 
+                    currentNode = currentNode.getParent();
+                
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleannotation
+
+
+    // $ANTLR start ruleClassType
+    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6675:1: ruleClassType returns [Enumerator current=null] : ( ( 'class' ) | ( 'model' ) | ( 'record' ) | ( 'block' ) | ( 'connector' ) | ( 'type' ) | ( 'package' ) | ( 'function' ) ) ;
+    public final Enumerator ruleClassType() throws RecognitionException {
+        Enumerator current = null;
+
+         setCurrentLookahead(); resetLookahead(); 
+        try {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6679:6: ( ( ( 'class' ) | ( 'model' ) | ( 'record' ) | ( 'block' ) | ( 'connector' ) | ( 'type' ) | ( 'package' ) | ( 'function' ) ) )
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6680:1: ( ( 'class' ) | ( 'model' ) | ( 'record' ) | ( 'block' ) | ( 'connector' ) | ( 'type' ) | ( 'package' ) | ( 'function' ) )
+            {
+            // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6680:1: ( ( 'class' ) | ( 'model' ) | ( 'record' ) | ( 'block' ) | ( 'connector' ) | ( 'type' ) | ( 'package' ) | ( 'function' ) )
+            int alt141=8;
+            switch ( input.LA(1) ) {
+            case 92:
+                {
+                alt141=1;
+                }
+                break;
+            case 93:
+                {
+                alt141=2;
+                }
+                break;
+            case 94:
+                {
+                alt141=3;
+                }
+                break;
+            case 95:
+                {
+                alt141=4;
+                }
+                break;
+            case 96:
+                {
+                alt141=5;
+                }
+                break;
+            case 97:
+                {
+                alt141=6;
+                }
+                break;
+            case 98:
+                {
+                alt141=7;
+                }
+                break;
+            case 49:
+                {
+                alt141=8;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("6680:1: ( ( 'class' ) | ( 'model' ) | ( 'record' ) | ( 'block' ) | ( 'connector' ) | ( 'type' ) | ( 'package' ) | ( 'function' ) )", 141, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt141) {
+                case 1 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6680:2: ( 'class' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6680:2: ( 'class' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6680:4: 'class'
+                    {
+                    match(input,92,FOLLOW_92_in_ruleClassType16723); 
+
+                            current = grammarAccess.getClassTypeAccess().getCLASSEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getCLASSEnumLiteralDeclaration_0(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6686:6: ( 'model' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6686:6: ( 'model' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6686:8: 'model'
+                    {
+                    match(input,93,FOLLOW_93_in_ruleClassType16738); 
+
+                            current = grammarAccess.getClassTypeAccess().getMODELEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getMODELEnumLiteralDeclaration_1(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6692:6: ( 'record' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6692:6: ( 'record' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6692:8: 'record'
+                    {
+                    match(input,94,FOLLOW_94_in_ruleClassType16753); 
+
+                            current = grammarAccess.getClassTypeAccess().getRECORDEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getRECORDEnumLiteralDeclaration_2(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6698:6: ( 'block' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6698:6: ( 'block' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6698:8: 'block'
+                    {
+                    match(input,95,FOLLOW_95_in_ruleClassType16768); 
+
+                            current = grammarAccess.getClassTypeAccess().getBLOCKEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getBLOCKEnumLiteralDeclaration_3(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6704:6: ( 'connector' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6704:6: ( 'connector' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6704:8: 'connector'
+                    {
+                    match(input,96,FOLLOW_96_in_ruleClassType16783); 
+
+                            current = grammarAccess.getClassTypeAccess().getCONNECTOREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getCONNECTOREnumLiteralDeclaration_4(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6710:6: ( 'type' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6710:6: ( 'type' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6710:8: 'type'
+                    {
+                    match(input,97,FOLLOW_97_in_ruleClassType16798); 
+
+                            current = grammarAccess.getClassTypeAccess().getTYPEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getTYPEEnumLiteralDeclaration_5(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 7 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6716:6: ( 'package' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6716:6: ( 'package' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6716:8: 'package'
+                    {
+                    match(input,98,FOLLOW_98_in_ruleClassType16813); 
+
+                            current = grammarAccess.getClassTypeAccess().getPACKAGEEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getPACKAGEEnumLiteralDeclaration_6(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6722:6: ( 'function' )
+                    {
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6722:6: ( 'function' )
+                    // ../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g:6722:8: 'function'
+                    {
+                    match(input,49,FOLLOW_49_in_ruleClassType16828); 
+
+                            current = grammarAccess.getClassTypeAccess().getFUNCTIONEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
+                            createLeafNode(grammarAccess.getClassTypeAccess().getFUNCTIONEnumLiteralDeclaration_7(), null); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             resetLookahead(); 
+                	lastConsumedNode = currentNode;
+                
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end ruleClassType
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleStorageUnit_in_entryRuleStorageUnit73 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStorageUnit83 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_42_in_ruleStorageUnit118 = new BitSet(new long[]{0x0000000000000030L});
+    public static final BitSet FOLLOW_rulename_path_in_ruleStorageUnit128 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleStorageUnit131 = new BitSet(new long[]{0x0002780000000002L,0x00000007F0000000L});
+    public static final BitSet FOLLOW_43_in_ruleStorageUnit143 = new BitSet(new long[]{0x0002700000000000L,0x00000007F0000000L});
+    public static final BitSet FOLLOW_ruleClassDefinition_in_ruleStorageUnit179 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleStorageUnit192 = new BitSet(new long[]{0x0002780000000002L,0x00000007F0000000L});
+    public static final BitSet FOLLOW_ruleClassDefinition_in_entryRuleClassDefinition229 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleClassDefinition239 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_44_in_ruleClassDefinition285 = new BitSet(new long[]{0x0002600000000000L,0x00000007F0000000L});
+    public static final BitSet FOLLOW_45_in_ruleClassDefinition320 = new BitSet(new long[]{0x0002400000000000L,0x00000007F0000000L});
+    public static final BitSet FOLLOW_46_in_ruleClassDefinition355 = new BitSet(new long[]{0x0002000000000000L,0x00000007F0000000L});
+    public static final BitSet FOLLOW_ruleClassType_in_ruleClassDefinition403 = new BitSet(new long[]{0x0000800000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleClassDefinition431 = new BitSet(new long[]{0xDFE3F80000000820L,0x00000007F800039FL});
+    public static final BitSet FOLLOW_rulestring_comment_in_ruleClassDefinition473 = new BitSet(new long[]{0xDFE3F80000000020L,0x00000007F800039FL});
+    public static final BitSet FOLLOW_47_in_ruleClassDefinition495 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleClassDefinition504 = new BitSet(new long[]{0xDFE3F800000008A0L,0x00000007F800039FL});
+    public static final BitSet FOLLOW_ruleclass_modification_in_ruleClassDefinition537 = new BitSet(new long[]{0xDFE3F80000000820L,0x00000007F800039FL});
+    public static final BitSet FOLLOW_rulestring_comment_in_ruleClassDefinition552 = new BitSet(new long[]{0xDFE3F80000000020L,0x00000007F800039FL});
+    public static final BitSet FOLLOW_ruleElementList_in_ruleClassDefinition582 = new BitSet(new long[]{0x00E1000000000000L,0x0000000000000380L});
+    public static final BitSet FOLLOW_ruleElementList2_in_ruleClassDefinition621 = new BitSet(new long[]{0x00E1000000000000L,0x0000000000000380L});
+    public static final BitSet FOLLOW_ruleinitial_equation_rule_clause_in_ruleClassDefinition665 = new BitSet(new long[]{0x00E1000000000000L,0x0000000000000380L});
+    public static final BitSet FOLLOW_ruleinitial_algorithm_clause_in_ruleClassDefinition709 = new BitSet(new long[]{0x00E1000000000000L,0x0000000000000380L});
+    public static final BitSet FOLLOW_ruleequation_rule_clause_in_ruleClassDefinition753 = new BitSet(new long[]{0x00E1000000000000L,0x0000000000000380L});
+    public static final BitSet FOLLOW_rulealgorithm_clause_in_ruleClassDefinition797 = new BitSet(new long[]{0x00E1000000000000L,0x0000000000000380L});
+    public static final BitSet FOLLOW_ruleexternal_clause_in_ruleClassDefinition837 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_48_in_ruleClassDefinition851 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleClassDefinition860 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulePartialDerivative_in_entryRulePartialDerivative892 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulePartialDerivative902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_49_in_rulePartialDerivative936 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulePartialDerivative958 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_rulePartialDerivative975 = new BitSet(new long[]{0x0004000000000000L});
+    public static final BitSet FOLLOW_50_in_rulePartialDerivative983 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_rulePartialDerivative992 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_rulePartialDerivative1001 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulePartialDerivative1002 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruleident_list_in_rulePartialDerivative1011 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_rulePartialDerivative1012 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_rulePartialDerivative1046 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleClassModification_in_entryRuleClassModification1083 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleClassModification1093 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleClassType_in_ruleClassModification1152 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleClassModification1178 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleClassModification1195 = new BitSet(new long[]{0xC000000000000020L,0x000000000000001FL});
+    public static final BitSet FOLLOW_ruletype_prefix_in_ruleClassModification1203 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruletype_specifier_in_ruleClassModification1229 = new BitSet(new long[]{0x0000000000000882L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_ruleClassModification1267 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleClassModification1306 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleClassOverloading_in_entryRuleClassOverloading1343 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleClassOverloading1353 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleClassType_in_ruleClassOverloading1412 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleClassOverloading1438 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleClassOverloading1455 = new BitSet(new long[]{0x0008000000000000L});
+    public static final BitSet FOLLOW_51_in_ruleClassOverloading1463 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_ruleClassOverloading1472 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_list_in_ruleClassOverloading1481 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_ruleClassOverloading1482 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleClassOverloading1516 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEnumeration_in_entryRuleEnumeration1553 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEnumeration1563 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleClassType_in_ruleEnumeration1622 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleEnumeration1648 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleEnumeration1665 = new BitSet(new long[]{0x0010000000000000L});
+    public static final BitSet FOLLOW_52_in_ruleEnumeration1673 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_ruleEnumeration1682 = new BitSet(new long[]{0x0000000000000220L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleEnumeration1705 = new BitSet(new long[]{0x0000000000000D00L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleEnumeration1747 = new BitSet(new long[]{0x0000000000000500L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_ruleEnumeration1761 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleEnumeration1782 = new BitSet(new long[]{0x0000000000000D00L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleEnumeration1824 = new BitSet(new long[]{0x0000000000000500L});
+    public static final BitSet FOLLOW_RULE_COLON_in_ruleEnumeration1846 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_ruleEnumeration1855 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleEnumeration1888 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleident_list_in_entryRuleident_list1926 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleident_list1937 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleident_list1977 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_ruleident_list1998 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleident_list2018 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_rulename_list_in_entryRulename_list2064 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulename_list2075 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulename_path_in_rulename_list2122 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulename_list2141 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_rulename_list2163 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_ruleexternal_clause_in_entryRuleexternal_clause2208 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleexternal_clause2218 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_53_in_ruleexternal_clause2252 = new BitSet(new long[]{0x0000000000000830L,0x0000000008000000L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleexternal_clause2274 = new BitSet(new long[]{0x0000000000000030L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleexternal_function_call_in_ruleexternal_clause2293 = new BitSet(new long[]{0x0000000000000010L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleexternal_clause2321 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleexternal_clause2335 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleexternal_clause2369 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleexternal_clause2382 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexternal_function_call_in_entryRuleexternal_function_call2417 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleexternal_function_call2428 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_reference_in_ruleexternal_function_call2476 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleexternal_function_call2496 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleexternal_function_call2518 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_ruleexternal_function_call2538 = new BitSet(new long[]{0x00050005C0F00CA0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_list_in_ruleexternal_function_call2566 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_ruleexternal_function_call2588 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementList_in_entryRuleElementList2631 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleElementList2641 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleClassElement_in_ruleElementList2701 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleElementList2745 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleElementList2759 = new BitSet(new long[]{0xDF02F80000000022L,0x00000007F800001FL});
+    public static final BitSet FOLLOW_ruleElementList2_in_entryRuleElementList22792 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleElementList22802 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_54_in_ruleElementList22837 = new BitSet(new long[]{0xDF02F80000000022L,0x00000007F800001FL});
+    public static final BitSet FOLLOW_ruleClassElement_in_ruleElementList22882 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleElementList22926 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleElementList22940 = new BitSet(new long[]{0xDF02F80000000022L,0x00000007F800001FL});
+    public static final BitSet FOLLOW_55_in_ruleElementList22958 = new BitSet(new long[]{0xDF02F80000000022L,0x00000007F800001FL});
+    public static final BitSet FOLLOW_ruleClassElement_in_ruleElementList23003 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleElementList23047 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleElementList23061 = new BitSet(new long[]{0xDF02F80000000022L,0x00000007F800001FL});
+    public static final BitSet FOLLOW_ruleClassElement_in_entryRuleClassElement3096 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleClassElement3106 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleimport_clause_in_ruleClassElement3153 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleextends_clause_in_ruleClassElement3180 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_56_in_ruleClassElement3196 = new BitSet(new long[]{0xCE02780000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_43_in_ruleClassElement3208 = new BitSet(new long[]{0xCE02700000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_57_in_ruleClassElement3220 = new BitSet(new long[]{0xCC02700000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_58_in_ruleClassElement3232 = new BitSet(new long[]{0xC802700000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_ruleClassDefinition_in_ruleClassElement3258 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_clause_in_ruleClassElement3285 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleReplaceableElementClause_in_ruleClassElement3313 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleReplaceableElementClause_in_entryRuleReplaceableElementClause3347 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleReplaceableElementClause3357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_59_in_ruleReplaceableElementClause3391 = new BitSet(new long[]{0xC002700000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_ruleClassDefinition_in_ruleReplaceableElementClause3417 = new BitSet(new long[]{0x2000800000000002L});
+    public static final BitSet FOLLOW_rulecomponent_clause_in_ruleReplaceableElementClause3431 = new BitSet(new long[]{0x2000800000000002L});
+    public static final BitSet FOLLOW_ruleconstraining_clause_in_ruleReplaceableElementClause3474 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleimport_clause_in_entryRuleimport_clause3512 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleimport_clause3522 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_60_in_ruleimport_clause3556 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleimport_clause3580 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleimport_clause3597 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_ruleimport_clause3630 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulename_path_star_in_ruleimport_clause3675 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleimport_clause3714 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleextends_clause_in_entryRuleextends_clause3751 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleextends_clause3761 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_47_in_ruleextends_clause3795 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_ruleextends_clause3829 = new BitSet(new long[]{0x0000000000000082L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_ruleextends_clause3867 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleextends_clause3906 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleconstraining_clause_in_entryRuleconstraining_clause3944 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleconstraining_clause3954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_47_in_ruleconstraining_clause3990 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_ruleconstraining_clause4024 = new BitSet(new long[]{0x0000000000000882L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_ruleconstraining_clause4062 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_61_in_ruleconstraining_clause4084 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_ruleconstraining_clause4118 = new BitSet(new long[]{0x0000000000000882L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_ruleconstraining_clause4156 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleconstraining_clause4197 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_clause_in_entryRulecomponent_clause4234 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulecomponent_clause4244 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruletype_prefix_in_rulecomponent_clause4303 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruletype_specifier_in_rulecomponent_clause4341 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulecomponent_declaration_in_rulecomponent_clause4379 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulecomponent_clause4393 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulecomponent_declaration_in_rulecomponent_clause4426 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_ruletype_prefix_in_entryRuletype_prefix4466 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuletype_prefix4477 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_62_in_ruletype_prefix4516 = new BitSet(new long[]{0x0000000000000002L,0x000000000000001FL});
+    public static final BitSet FOLLOW_63_in_ruletype_prefix4535 = new BitSet(new long[]{0x0000000000000002L,0x000000000000001FL});
+    public static final BitSet FOLLOW_64_in_ruletype_prefix4551 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000018L});
+    public static final BitSet FOLLOW_65_in_ruletype_prefix4570 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000018L});
+    public static final BitSet FOLLOW_66_in_ruletype_prefix4589 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000018L});
+    public static final BitSet FOLLOW_67_in_ruletype_prefix4605 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_68_in_ruletype_prefix4624 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruletype_specifier_in_entryRuletype_specifier4664 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuletype_specifier4674 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulename_path_in_ruletype_specifier4733 = new BitSet(new long[]{0x0000000100000002L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_ruletype_specifier4771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_declaration_in_entryRulecomponent_declaration4809 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulecomponent_declaration4819 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulecomponent_declaration4853 = new BitSet(new long[]{0x00000001000018C2L,0x0000000008000020L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_rulecomponent_declaration4886 = new BitSet(new long[]{0x00000000000018C2L,0x0000000008000020L});
+    public static final BitSet FOLLOW_rulemodification_in_rulecomponent_declaration4925 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000020L});
+    public static final BitSet FOLLOW_69_in_rulecomponent_declaration4940 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulecomponent_declaration4974 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_rulecomponent_declaration5014 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulemodification_in_entryRulemodification5051 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulemodification5061 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_rulemodification5108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleModification_in_rulemodification5135 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSimpleModification_in_entryRuleSimpleModification5167 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSimpleModification5177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleSimpleModification5212 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleSimpleModification5245 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ASSIGN_in_ruleSimpleModification5266 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleSimpleModification5299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_entryRuleclass_modification5337 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleclass_modification5347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_ruleclass_modification5381 = new BitSet(new long[]{0x0900080000000420L,0x0000000000000040L});
+    public static final BitSet FOLLOW_ruleargument_in_ruleclass_modification5415 = new BitSet(new long[]{0x0000000000000500L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_ruleclass_modification5429 = new BitSet(new long[]{0x0900080000000020L,0x0000000000000040L});
+    public static final BitSet FOLLOW_ruleargument_in_ruleclass_modification5462 = new BitSet(new long[]{0x0000000000000500L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_ruleclass_modification5479 = new BitSet(new long[]{0x0000000000000042L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleclass_modification5488 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleclass_modification5521 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleargument_in_entryRuleargument5560 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleargument5570 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_70_in_ruleargument5606 = new BitSet(new long[]{0x0800080000000020L});
+    public static final BitSet FOLLOW_43_in_ruleargument5618 = new BitSet(new long[]{0x0800000000000020L});
+    public static final BitSet FOLLOW_ruleElementModification_in_ruleargument5643 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementReplaceableClause_in_ruleargument5670 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementRedeclaration_in_ruleargument5699 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementModification_in_entryRuleElementModification5731 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleElementModification5741 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_reference_in_ruleElementModification5800 = new BitSet(new long[]{0x00000000000018C2L});
+    public static final BitSet FOLLOW_rulemodification_in_ruleElementModification5838 = new BitSet(new long[]{0x0000000000000802L});
+    public static final BitSet FOLLOW_rulestring_comment_in_ruleElementModification5877 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementRedeclaration_in_entryRuleElementRedeclaration5915 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleElementRedeclaration5925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_56_in_ruleElementRedeclaration5959 = new BitSet(new long[]{0xC802780000000020L,0x00000007F000005FL});
+    public static final BitSet FOLLOW_70_in_ruleElementRedeclaration5969 = new BitSet(new long[]{0xC802780000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_43_in_ruleElementRedeclaration5981 = new BitSet(new long[]{0xC802700000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_ruleClassDefinition_in_ruleElementRedeclaration6007 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementComponentClause_in_ruleElementRedeclaration6034 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementReplaceableClause_in_ruleElementRedeclaration6062 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementReplaceableClause_in_entryRuleElementReplaceableClause6095 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleElementReplaceableClause6105 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_59_in_ruleElementReplaceableClause6139 = new BitSet(new long[]{0xC002700000000020L,0x00000007F000001FL});
+    public static final BitSet FOLLOW_ruleClassDefinition_in_ruleElementReplaceableClause6165 = new BitSet(new long[]{0x2000800000000002L});
+    public static final BitSet FOLLOW_ruleElementComponentClause_in_ruleElementReplaceableClause6179 = new BitSet(new long[]{0x2000800000000002L});
+    public static final BitSet FOLLOW_ruleconstraining_clause_in_ruleElementReplaceableClause6222 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleElementComponentClause_in_entryRuleElementComponentClause6260 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleElementComponentClause6270 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruletype_prefix_in_ruleElementComponentClause6329 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruletype_specifier_in_ruleElementComponentClause6367 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleElementComponentClause6380 = new BitSet(new long[]{0x00000001000018C2L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_ruleElementComponentClause6413 = new BitSet(new long[]{0x00000000000018C2L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulemodification_in_ruleElementComponentClause6452 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleElementComponentClause6491 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleequation_rule_clause_in_entryRuleequation_rule_clause6528 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleequation_rule_clause6538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_71_in_ruleequation_rule_clause6572 = new BitSet(new long[]{0x00050005C0F008A0L,0x000000000F124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_ruleequation_rule_clause6608 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleequation_rule_clause6621 = new BitSet(new long[]{0x00050005C0F008A2L,0x000000000F124220L});
+    public static final BitSet FOLLOW_ruleannotation_in_ruleequation_rule_clause6662 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleequation_rule_clause6675 = new BitSet(new long[]{0x00050005C0F008A2L,0x000000000F124220L});
+    public static final BitSet FOLLOW_rulealgorithm_clause_in_entryRulealgorithm_clause6710 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulealgorithm_clause6720 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_72_in_rulealgorithm_clause6754 = new BitSet(new long[]{0x00050005C0F008A0L,0x000000000F034E20L});
+    public static final BitSet FOLLOW_rulealgorithm_in_rulealgorithm_clause6790 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulealgorithm_clause6803 = new BitSet(new long[]{0x00050005C0F008A2L,0x000000000F034E20L});
+    public static final BitSet FOLLOW_ruleannotation_in_rulealgorithm_clause6844 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulealgorithm_clause6857 = new BitSet(new long[]{0x00050005C0F008A2L,0x000000000F034E20L});
+    public static final BitSet FOLLOW_ruleinitial_equation_rule_clause_in_entryRuleinitial_equation_rule_clause6892 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleinitial_equation_rule_clause6902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_73_in_ruleinitial_equation_rule_clause6936 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_ruleequation_rule_clause_in_ruleinitial_equation_rule_clause6958 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleinitial_algorithm_clause_in_entryRuleinitial_algorithm_clause6990 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleinitial_algorithm_clause7000 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_73_in_ruleinitial_algorithm_clause7034 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_rulealgorithm_clause_in_ruleinitial_algorithm_clause7056 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_entryRuleequation_rule7088 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleequation_rule7098 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleequality_equation_rule_in_ruleequation_rule7133 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleconditional_equation_rule_e_in_ruleequation_rule7153 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulefor_clause_e_in_ruleequation_rule7180 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleconnect_clause_in_ruleequation_rule7194 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulewhen_clause_e_in_ruleequation_rule7214 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_ruleequation_rule7248 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulealgorithm_in_entryRulealgorithm7285 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulealgorithm7295 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleassign_clause_a_in_rulealgorithm7330 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleconditional_equation_rule_a_in_rulealgorithm7350 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulefor_clause_a_in_rulealgorithm7377 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulewhile_clause_in_rulealgorithm7404 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulewhen_clause_a_in_rulealgorithm7431 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_74_in_rulealgorithm7445 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_75_in_rulealgorithm7460 = new BitSet(new long[]{0x0000000000000802L,0x0000000008000000L});
+    public static final BitSet FOLLOW_rulecomment_in_rulealgorithm7495 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleassign_clause_a_in_entryRuleassign_clause_a7533 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleassign_clause_a7544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesimple_expression_in_ruleassign_clause_a7591 = new BitSet(new long[]{0x0000000000001042L});
+    public static final BitSet FOLLOW_RULE_ASSIGN_in_ruleassign_clause_a7613 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleassign_clause_a7640 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleassign_clause_a7668 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleassign_clause_a7695 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleequality_equation_rule_in_entryRuleequality_equation_rule7742 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleequality_equation_rule7753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesimple_expression_in_ruleequality_equation_rule7800 = new BitSet(new long[]{0x0000000000000042L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_ruleequality_equation_rule7821 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleequality_equation_rule7848 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleconditional_equation_rule_e_in_entryRuleconditional_equation_rule_e7893 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleconditional_equation_rule_e7903 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_69_in_ruleconditional_equation_rule_e7937 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleconditional_equation_rule_e7946 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleconditional_equation_rule_e7947 = new BitSet(new long[]{0x00050005C0F008A0L,0x00000000071A6220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_ruleconditional_equation_rule_e7982 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_e7995 = new BitSet(new long[]{0x00050005C0F008A0L,0x00000000071A6220L});
+    public static final BitSet FOLLOW_ruleequation_rule_elseif_in_ruleconditional_equation_rule_e8030 = new BitSet(new long[]{0x0001000000000000L,0x0000000000082000L});
+    public static final BitSet FOLLOW_77_in_ruleconditional_equation_rule_e8045 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_ruleconditional_equation_rule_e8080 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_e8093 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007124220L});
+    public static final BitSet FOLLOW_48_in_ruleconditional_equation_rule_e8105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_69_in_ruleconditional_equation_rule_e8114 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleconditional_equation_rule_a_in_entryRuleconditional_equation_rule_a8147 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleconditional_equation_rule_a8157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_69_in_ruleconditional_equation_rule_a8191 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleconditional_equation_rule_a8225 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleconditional_equation_rule_a8238 = new BitSet(new long[]{0x00050005C0F008A0L,0x00000000070B6E20L});
+    public static final BitSet FOLLOW_rulealgorithm_in_ruleconditional_equation_rule_a8273 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_a8286 = new BitSet(new long[]{0x00050005C0F008A0L,0x00000000070B6E20L});
+    public static final BitSet FOLLOW_rulealgorithm_elseif_in_ruleconditional_equation_rule_a8321 = new BitSet(new long[]{0x0001000000000000L,0x0000000000082000L});
+    public static final BitSet FOLLOW_77_in_ruleconditional_equation_rule_a8336 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007034E20L});
+    public static final BitSet FOLLOW_rulealgorithm_in_ruleconditional_equation_rule_a8371 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleconditional_equation_rule_a8384 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007034E20L});
+    public static final BitSet FOLLOW_48_in_ruleconditional_equation_rule_a8396 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_69_in_ruleconditional_equation_rule_a8405 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_clause_e_in_entryRulefor_clause_e8438 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefor_clause_e8448 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_78_in_rulefor_clause_e8482 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulefor_indices_in_rulefor_clause_e8516 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+    public static final BitSet FOLLOW_79_in_rulefor_clause_e8529 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_rulefor_clause_e8564 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulefor_clause_e8577 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007124220L});
+    public static final BitSet FOLLOW_48_in_rulefor_clause_e8587 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
+    public static final BitSet FOLLOW_78_in_rulefor_clause_e8596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_clause_a_in_entryRulefor_clause_a8629 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefor_clause_a8639 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_78_in_rulefor_clause_a8673 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulefor_indices_in_rulefor_clause_a8707 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+    public static final BitSet FOLLOW_79_in_rulefor_clause_a8720 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007034E20L});
+    public static final BitSet FOLLOW_rulealgorithm_in_rulefor_clause_a8755 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulefor_clause_a8768 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007034E20L});
+    public static final BitSet FOLLOW_48_in_rulefor_clause_a8778 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
+    public static final BitSet FOLLOW_78_in_rulefor_clause_a8787 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulewhile_clause_in_entryRulewhile_clause8820 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulewhile_clause8830 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_80_in_rulewhile_clause8864 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulewhile_clause8898 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
+    public static final BitSet FOLLOW_79_in_rulewhile_clause8911 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007034E20L});
+    public static final BitSet FOLLOW_rulealgorithm_in_rulewhile_clause8946 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulewhile_clause8959 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007034E20L});
+    public static final BitSet FOLLOW_48_in_rulewhile_clause8969 = new BitSet(new long[]{0x0000000000000000L,0x0000000000010000L});
+    public static final BitSet FOLLOW_80_in_rulewhile_clause8978 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulewhen_clause_e_in_entryRulewhen_clause_e9011 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulewhen_clause_e9021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_81_in_rulewhen_clause_e9055 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulewhen_clause_e9089 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_rulewhen_clause_e9102 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007164220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_rulewhen_clause_e9137 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulewhen_clause_e9150 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007164220L});
+    public static final BitSet FOLLOW_ruleelse_when_e_in_rulewhen_clause_e9185 = new BitSet(new long[]{0x0001000000000000L,0x0000000000040000L});
+    public static final BitSet FOLLOW_48_in_rulewhen_clause_e9199 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L});
+    public static final BitSet FOLLOW_81_in_rulewhen_clause_e9208 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleelse_when_e_in_entryRuleelse_when_e9241 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleelse_when_e9251 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_82_in_ruleelse_when_e9285 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleelse_when_e9319 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleelse_when_e9332 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_ruleelse_when_e9367 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleelse_when_e9380 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_rulewhen_clause_a_in_entryRulewhen_clause_a9414 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulewhen_clause_a9424 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_81_in_rulewhen_clause_a9458 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulewhen_clause_a9492 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_rulewhen_clause_a9505 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007164220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_rulewhen_clause_a9540 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulewhen_clause_a9553 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007164220L});
+    public static final BitSet FOLLOW_ruleelse_when_a_in_rulewhen_clause_a9588 = new BitSet(new long[]{0x0001000000000000L,0x0000000000040000L});
+    public static final BitSet FOLLOW_48_in_rulewhen_clause_a9602 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L});
+    public static final BitSet FOLLOW_81_in_rulewhen_clause_a9611 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleelse_when_a_in_entryRuleelse_when_a9644 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleelse_when_a9654 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_82_in_ruleelse_when_a9688 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleelse_when_a9722 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleelse_when_a9735 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_ruleelse_when_a9770 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleelse_when_a9783 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_elseif_in_entryRuleequation_rule_elseif9817 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleequation_rule_elseif9827 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_83_in_ruleequation_rule_elseif9861 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleequation_rule_elseif9895 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleequation_rule_elseif9908 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_ruleequation_rule_elseif9943 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleequation_rule_elseif9956 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_rulealgorithm_elseif_in_entryRulealgorithm_elseif9990 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulealgorithm_elseif10000 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_83_in_rulealgorithm_elseif10034 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulealgorithm_elseif10068 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_rulealgorithm_elseif10081 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleequation_rule_in_rulealgorithm_elseif10116 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_rulealgorithm_elseif10129 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007124220L});
+    public static final BitSet FOLLOW_ruleconnect_clause_in_entryRuleconnect_clause10164 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleconnect_clause10175 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_84_in_ruleconnect_clause10213 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_ruleconnect_clause10228 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruleconnector_ref_in_ruleconnect_clause10255 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_ruleconnect_clause10275 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruleconnector_ref_in_ruleconnect_clause10302 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_ruleconnect_clause10322 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleconnector_ref_in_entryRuleconnector_ref10366 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleconnector_ref10377 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleconnector_ref10417 = new BitSet(new long[]{0x0000000100002002L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_ruleconnector_ref10445 = new BitSet(new long[]{0x0000000000002002L});
+    public static final BitSet FOLLOW_RULE_DOT_in_ruleconnector_ref10468 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ruleconnector_ref_2_in_ruleconnector_ref10495 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleconnector_ref_2_in_entryRuleconnector_ref_210541 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleconnector_ref_210552 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_ruleconnector_ref_210592 = new BitSet(new long[]{0x0000000100000002L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_ruleconnector_ref_210620 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_in_entryRuleexpression10666 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleexpression10677 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleif_expression_in_ruleexpression10724 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesimple_expression_in_ruleexpression10757 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleif_expression_in_entryRuleif_expression10803 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleif_expression10814 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_69_in_ruleif_expression10852 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleif_expression10874 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleif_expression10892 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleif_expression10914 = new BitSet(new long[]{0x0000000000000000L,0x0000000000082000L});
+    public static final BitSet FOLLOW_ruleelseif_expression_in_ruleif_expression10942 = new BitSet(new long[]{0x0000000000000000L,0x0000000000082000L});
+    public static final BitSet FOLLOW_77_in_ruleif_expression10962 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleif_expression10984 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleelseif_expression_in_entryRuleelseif_expression11028 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleelseif_expression11039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_83_in_ruleelseif_expression11077 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleelseif_expression11099 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_76_in_ruleelseif_expression11117 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleelseif_expression11139 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_indices_in_entryRulefor_indices11183 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefor_indices11194 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_index_in_rulefor_indices11241 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulefor_indices11262 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulefor_index_in_rulefor_indices11289 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_rulefor_index_in_entryRulefor_index11335 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefor_index11346 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulefor_index11386 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_85_in_rulefor_index11405 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulefor_index11427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesimple_expression_in_entryRulesimple_expression11473 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulesimple_expression11484 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesimple_expr_in_rulesimple_expression11530 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesimple_expr_in_entryRulesimple_expr11573 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulesimple_expr11584 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulelogical_expression_in_rulesimple_expr11631 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_RULE_COLON_in_rulesimple_expr11652 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000200L});
+    public static final BitSet FOLLOW_rulelogical_expression_in_rulesimple_expr11679 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_RULE_COLON_in_rulesimple_expr11700 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000200L});
+    public static final BitSet FOLLOW_rulelogical_expression_in_rulesimple_expr11727 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulelogical_expression_in_entryRulelogical_expression11775 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulelogical_expression11786 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulelogical_term_in_rulelogical_expression11833 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_86_in_rulelogical_expression11852 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000200L});
+    public static final BitSet FOLLOW_rulelogical_term_in_rulelogical_expression11874 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rulelogical_term_in_entryRulelogical_term11920 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulelogical_term11931 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulelogical_factor_in_rulelogical_term11978 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_87_in_rulelogical_term11997 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000200L});
+    public static final BitSet FOLLOW_rulelogical_factor_in_rulelogical_term12019 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_rulelogical_factor_in_entryRulelogical_factor12065 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulelogical_factor12076 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_88_in_rulelogical_factor12115 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_rulerelation_in_rulelogical_factor12139 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulerelation_in_entryRulerelation12183 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulerelation12194 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulearithmetic_expression_in_rulerelation12241 = new BitSet(new long[]{0x00000000000FC002L});
+    public static final BitSet FOLLOW_RULE_LESS_in_rulerelation12263 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_LESSEQ_in_rulerelation12289 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_GREATER_in_rulerelation12315 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_GREATEREQ_in_rulerelation12341 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_EQEQ_in_rulerelation12367 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_LESSGT_in_rulerelation12393 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_rulearithmetic_expression_in_rulerelation12421 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulearithmetic_expression_in_entryRulearithmetic_expression12467 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulearithmetic_expression12478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleunary_arithmetic_expression_in_rulearithmetic_expression12525 = new BitSet(new long[]{0x0000000000F00002L});
+    public static final BitSet FOLLOW_RULE_PLUS_in_rulearithmetic_expression12547 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_MINUS_in_rulearithmetic_expression12573 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_PLUS_EW_in_rulearithmetic_expression12599 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_MINUS_EW_in_rulearithmetic_expression12625 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_ruleterm_in_rulearithmetic_expression12653 = new BitSet(new long[]{0x0000000000F00002L});
+    public static final BitSet FOLLOW_ruleunary_arithmetic_expression_in_entryRuleunary_arithmetic_expression12699 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleunary_arithmetic_expression12710 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_PLUS_in_ruleunary_arithmetic_expression12751 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12778 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_MINUS_in_ruleunary_arithmetic_expression12806 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12833 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_PLUS_EW_in_ruleunary_arithmetic_expression12861 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12888 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_MINUS_EW_in_ruleunary_arithmetic_expression12916 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12943 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleterm_in_ruleunary_arithmetic_expression12977 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleterm_in_entryRuleterm13021 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleterm13032 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefactor_in_ruleterm13079 = new BitSet(new long[]{0x000000000F000002L});
+    public static final BitSet FOLLOW_RULE_STAR_in_ruleterm13101 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_SLASH_in_ruleterm13127 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_STAR_EW_in_ruleterm13153 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_SLASH_EW_in_ruleterm13179 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_rulefactor_in_ruleterm13207 = new BitSet(new long[]{0x000000000F000002L});
+    public static final BitSet FOLLOW_rulefactor_in_entryRulefactor13253 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefactor13264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleprimary_in_rulefactor13311 = new BitSet(new long[]{0x0000000030000002L});
+    public static final BitSet FOLLOW_RULE_POWER_in_rulefactor13333 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_RULE_POWER_EW_in_rulefactor13359 = new BitSet(new long[]{0x00050005C00008A0L,0x0000000006000200L});
+    public static final BitSet FOLLOW_ruleprimary_in_rulefactor13387 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleprimary_in_entryRuleprimary13433 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleprimary13444 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_UNSIGNED_INTEGER_in_ruleprimary13484 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_UNSIGNED_REAL_in_ruleprimary13510 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleprimary13536 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_89_in_ruleprimary13560 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_90_in_ruleprimary13579 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_reference__function_call_in_ruleprimary13607 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_50_in_ruleprimary13632 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rulefunction_call_in_ruleprimary13654 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_ruleprimary13682 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_list_in_ruleprimary13709 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_ruleprimary13729 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LBRACK_in_ruleprimary13757 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_list_in_ruleprimary13784 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_RULE_SEMICOLON_in_ruleprimary13805 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_list_in_ruleprimary13832 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_RULE_RBRACK_in_ruleprimary13854 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LBRACE_in_ruleprimary13882 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_rulefor_or_expression_list_in_ruleprimary13909 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_RULE_RBRACE_in_ruleprimary13929 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_48_in_ruleprimary13954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_reference__function_call_in_entryRulecomponent_reference__function_call13993 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulecomponent_reference__function_call14004 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_reference_in_rulecomponent_reference__function_call14052 = new BitSet(new long[]{0x0000000000000082L});
+    public static final BitSet FOLLOW_rulefunction_call_in_rulecomponent_reference__function_call14080 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_73_in_rulecomponent_reference__function_call14108 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_rulecomponent_reference__function_call14123 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_rulecomponent_reference__function_call14143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulename_path_in_entryRulename_path14188 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulename_path14199 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulename_path14239 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulename_path14266 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RULE_DOT_in_rulename_path14286 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_in_rulename_path14313 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulename_path_star_in_entryRulename_path_star14358 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulename_path_star14369 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulename_path_star14410 = new BitSet(new long[]{0x0000000004000002L});
+    public static final BitSet FOLLOW_RULE_STAR_EW_in_rulename_path_star14431 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulename_path_star14461 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RULE_DOT_in_rulename_path_star14481 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulename_path_star_in_rulename_path_star14508 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomponent_reference_in_entryRulecomponent_reference14553 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulecomponent_reference14564 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulecomponent_reference14604 = new BitSet(new long[]{0x0000000100002002L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_rulecomponent_reference14632 = new BitSet(new long[]{0x0000000000002002L});
+    public static final BitSet FOLLOW_RULE_DOT_in_rulecomponent_reference14655 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulecomponent_reference_in_rulecomponent_reference14682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefunction_call_in_entryRulefunction_call14728 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefunction_call14739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LPAR_in_rulefunction_call14779 = new BitSet(new long[]{0x00050005C0F00CA0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_rulefunction_arguments_in_rulefunction_call14806 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_RULE_RPAR_in_rulefunction_call14826 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefunction_arguments_in_entryRulefunction_arguments14870 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefunction_arguments14881 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_or_expression_list_in_rulefunction_arguments14929 = new BitSet(new long[]{0x0000000000000022L});
+    public static final BitSet FOLLOW_rulenamed_arguments_in_rulefunction_arguments14959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_or_expression_list_in_entryRulefor_or_expression_list15005 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefor_or_expression_list15016 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulefor_or_expression_list15063 = new BitSet(new long[]{0x0000000000000102L,0x0000000000004000L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulefor_or_expression_list15085 = new BitSet(new long[]{0x00050005C0F008A2L,0x0000000007000220L});
+    public static final BitSet FOLLOW_rulefor_or_expression_list2_in_rulefor_or_expression_list15113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_78_in_rulefor_or_expression_list15141 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulefor_indices_in_rulefor_or_expression_list15163 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulefor_or_expression_list2_in_entryRulefor_or_expression_list215210 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulefor_or_expression_list215221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulefor_or_expression_list215268 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulefor_or_expression_list215289 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_rulefor_or_expression_list2_in_rulefor_or_expression_list215316 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulenamed_arguments_in_entryRulenamed_arguments15362 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulenamed_arguments15373 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulenamed_arguments2_in_rulenamed_arguments15419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulenamed_arguments2_in_entryRulenamed_arguments215462 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulenamed_arguments215473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulenamed_argument_in_rulenamed_arguments215520 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulenamed_arguments215541 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rulenamed_argument_in_rulenamed_arguments215568 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_rulenamed_argument_in_entryRulenamed_argument15614 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulenamed_argument15625 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_IDENT_in_rulenamed_argument15665 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_EQUALS_in_rulenamed_argument15685 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulenamed_argument15712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_list_in_entryRuleexpression_list15756 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleexpression_list15767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_list2_in_ruleexpression_list15813 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_list2_in_entryRuleexpression_list215856 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleexpression_list215867 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_in_ruleexpression_list215914 = new BitSet(new long[]{0x0000000000000102L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_ruleexpression_list215935 = new BitSet(new long[]{0x00050005C0F008A0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_ruleexpression_list2_in_ruleexpression_list215962 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulearray_subscripts_in_entryRulearray_subscripts16008 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulearray_subscripts16019 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LBRACK_in_rulearray_subscripts16059 = new BitSet(new long[]{0x00050005C0F00AA0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_rulesubscript_in_rulearray_subscripts16086 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_RULE_COMMA_in_rulearray_subscripts16107 = new BitSet(new long[]{0x00050005C0F00AA0L,0x0000000007000220L});
+    public static final BitSet FOLLOW_rulesubscript_in_rulearray_subscripts16134 = new BitSet(new long[]{0x0000000200000100L});
+    public static final BitSet FOLLOW_RULE_RBRACK_in_rulearray_subscripts16156 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulesubscript_in_entryRulesubscript16200 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulesubscript16211 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleexpression_in_rulesubscript16258 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_COLON_in_rulesubscript16284 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulecomment_in_entryRulecomment16327 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulecomment16337 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulestring_comment_in_rulecomment16396 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ruleannotation_in_rulecomment16435 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rulestring_comment_in_entryRulestring_comment16474 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRulestring_comment16485 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rulestring_comment16525 = new BitSet(new long[]{0x0000000000100002L});
+    public static final BitSet FOLLOW_RULE_PLUS_in_rulestring_comment16546 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rulestring_comment16566 = new BitSet(new long[]{0x0000000000100002L});
+    public static final BitSet FOLLOW_ruleannotation_in_entryRuleannotation16611 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleannotation16621 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_91_in_ruleannotation16655 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_ruleclass_modification_in_ruleannotation16677 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_92_in_ruleClassType16723 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_93_in_ruleClassType16738 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_94_in_ruleClassType16753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_95_in_ruleClassType16768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_96_in_ruleClassType16783 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_97_in_ruleClassType16798 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_98_in_ruleClassType16813 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_49_in_ruleClassType16828 = new BitSet(new long[]{0x0000000000000002L});
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase__.g
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase__.g	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase__.g	(revision 540)
@@ -0,0 +1,182 @@
+lexer grammar InternalModelicaBase;
+@header {
+package org.modelica.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;
+}
+
+T42 : 'within' ;
+T43 : 'final' ;
+T44 : 'encapsulated' ;
+T45 : 'partial' ;
+T46 : 'expandable' ;
+T47 : 'extends' ;
+T48 : 'end' ;
+T49 : 'function' ;
+T50 : 'der' ;
+T51 : 'overload' ;
+T52 : 'enumeration' ;
+T53 : 'external' ;
+T54 : 'public' ;
+T55 : 'protected' ;
+T56 : 'redeclare' ;
+T57 : 'inner' ;
+T58 : 'outer' ;
+T59 : 'replaceable' ;
+T60 : 'import' ;
+T61 : 'constrainedby' ;
+T62 : 'flow' ;
+T63 : 'stream' ;
+T64 : 'discrete' ;
+T65 : 'parameter' ;
+T66 : 'constant' ;
+T67 : 'input' ;
+T68 : 'output' ;
+T69 : 'if' ;
+T70 : 'each' ;
+T71 : 'equation' ;
+T72 : 'algorithm' ;
+T73 : 'initial' ;
+T74 : 'break' ;
+T75 : 'return' ;
+T76 : 'then' ;
+T77 : 'else' ;
+T78 : 'for' ;
+T79 : 'loop' ;
+T80 : 'while' ;
+T81 : 'when' ;
+T82 : 'elsewhen' ;
+T83 : 'elseif' ;
+T84 : 'connect' ;
+T85 : 'in' ;
+T86 : 'or' ;
+T87 : 'and' ;
+T88 : 'not' ;
+T89 : 'false' ;
+T90 : 'true' ;
+T91 : 'annotation' ;
+T92 : 'class' ;
+T93 : 'model' ;
+T94 : 'record' ;
+T95 : 'block' ;
+T96 : 'connector' ;
+T97 : 'type' ;
+T98 : 'package' ;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6731
+RULE_DOT : '.';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6733
+RULE_LPAR : '(';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6735
+RULE_RPAR : ')';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6737
+RULE_LBRACK : '[';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6739
+RULE_RBRACK : ']';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6741
+RULE_LBRACE : '{';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6743
+RULE_RBRACE : '}';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6745
+RULE_EQUALS : '=';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6747
+RULE_ASSIGN : ':=';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6749
+RULE_COMMA : ',';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6751
+RULE_COLON : ':';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6753
+RULE_SEMICOLON : ';';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6755
+RULE_PLUS_EW : '.+';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6757
+RULE_MINUS_EW : '.-';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6759
+RULE_STAR_EW : '.*';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6761
+RULE_SLASH_EW : './';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6763
+RULE_POWER_EW : '.^';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6765
+RULE_STAR : '*' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6767
+RULE_MINUS : '-' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6769
+RULE_PLUS : '+' ('.'|'&')?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6771
+RULE_LESS : '<' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6773
+RULE_LESSEQ : '<=' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6775
+RULE_LESSGT : ('!=' '.'?|'<>' '.'?);
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6777
+RULE_GREATER : '>' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6779
+RULE_GREATEREQ : '>=' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6781
+RULE_EQEQ : '==' ('.'|'&')?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6783
+RULE_POWER : '^' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6785
+RULE_SLASH : '/' '.'?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6787
+RULE_UNSIGNED_REAL : (('0'..'9')+ '.' ('0'..'9')* (('E'|'e') ('+'|'-')? ('0'..'9')+)?|('0'..'9')+ ('E'|'e') ('+'|'-')? ('0'..'9')+);
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6789
+RULE_UNSIGNED_INTEGER : ('0'..'9')+;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6791
+RULE_IDENT : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6793
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6795
+RULE_INT : ('0'..'9')+;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6797
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6799
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6801
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6803
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+// $ANTLR src "../org.modelica.xtext/src-gen/org/modelica/xtext/parser/antlr/internal/InternalModelicaBase.g" 6805
+RULE_ANY_OTHER : .;
+
+
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/services/ModelicaBaseGrammarAccess.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/services/ModelicaBaseGrammarAccess.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/services/ModelicaBaseGrammarAccess.java	(revision 540)
@@ -0,0 +1,6211 @@
+/*
+* generated by Xtext
+*/
+
+package org.modelica.xtext.services;
+
+import com.google.inject.Singleton;
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.*;
+
+import org.eclipse.xtext.service.GrammarProvider;
+
+import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
+
+@Singleton
+public class ModelicaBaseGrammarAccess implements IGrammarAccess {
+	
+	
+	public class StorageUnitElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StorageUnit");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
+		private final Keyword cWithinKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final RuleCall cName_pathParserRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
+		private final RuleCall cSEMICOLONTerminalRuleCall_0_2 = (RuleCall)cGroup_0.eContents().get(2);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cFinalKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cClassDefinitionAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cClassDefinitionClassDefinitionParserRuleCall_1_1_0 = (RuleCall)cClassDefinitionAssignment_1_1.eContents().get(0);
+		private final Keyword cSemicolonKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
+		
+		//StorageUnit:
+		//  ("within" name_path? SEMICOLON)? ("final"? classDefinition+=ClassDefinition ";")*; 
+		//
+		/// *
+		// * Copyright (c) 2009 - currentYear, Adrian Pop [adrpo@ida.liu.se] 
+		// * All rights reserved.
+		// * /
+		//
+		//  
+		//
+		//
+		/// *------------------------------------------------------------------
+		// * PARSER RULES
+		// *------------------------------------------------------------------* /
+		public ParserRule getRule() { return rule; }
+
+		//("within" name_path? SEMICOLON)? ("final"? classDefinition+=ClassDefinition ";")*
+		public Group getGroup() { return cGroup; }
+
+		//("within" name_path? SEMICOLON)?
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"within"
+		public Keyword getWithinKeyword_0_0() { return cWithinKeyword_0_0; }
+
+		//name_path?
+		public RuleCall getName_pathParserRuleCall_0_1() { return cName_pathParserRuleCall_0_1; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_0_2() { return cSEMICOLONTerminalRuleCall_0_2; }
+
+		//("final"? classDefinition+=ClassDefinition ";")*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"final"?
+		public Keyword getFinalKeyword_1_0() { return cFinalKeyword_1_0; }
+
+		//classDefinition+=ClassDefinition
+		public Assignment getClassDefinitionAssignment_1_1() { return cClassDefinitionAssignment_1_1; }
+
+		//ClassDefinition
+		public RuleCall getClassDefinitionClassDefinitionParserRuleCall_1_1_0() { return cClassDefinitionClassDefinitionParserRuleCall_1_1_0; }
+
+		//";"
+		public Keyword getSemicolonKeyword_1_2() { return cSemicolonKeyword_1_2; }
+	}
+
+	public class EntityDefinitionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EntityDefinition");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cClassDefinitionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cPartialDerivativeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cClassModificationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cClassOverloadingParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
+		private final RuleCall cEnumerationParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
+		
+		//EntityDefinition:
+		//  ClassDefinition|PartialDerivative|ClassModification|ClassOverloading|Enumeration
+		//;
+		public ParserRule getRule() { return rule; }
+
+		//ClassDefinition|PartialDerivative|ClassModification|ClassOverloading|Enumeration
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//ClassDefinition
+		public RuleCall getClassDefinitionParserRuleCall_0() { return cClassDefinitionParserRuleCall_0; }
+
+		//PartialDerivative
+		public RuleCall getPartialDerivativeParserRuleCall_1() { return cPartialDerivativeParserRuleCall_1; }
+
+		//ClassModification
+		public RuleCall getClassModificationParserRuleCall_2() { return cClassModificationParserRuleCall_2; }
+
+		//ClassOverloading
+		public RuleCall getClassOverloadingParserRuleCall_3() { return cClassOverloadingParserRuleCall_3; }
+
+		//Enumeration
+		public RuleCall getEnumerationParserRuleCall_4() { return cEnumerationParserRuleCall_4; }
+	}
+
+	public class ClassDefinitionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ClassDefinition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cEncapsulatedAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final Keyword cEncapsulatedEncapsulatedKeyword_0_0 = (Keyword)cEncapsulatedAssignment_0.eContents().get(0);
+		private final Assignment cPartialAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final Keyword cPartialPartialKeyword_1_0 = (Keyword)cPartialAssignment_1.eContents().get(0);
+		private final Assignment cExpandableAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final Keyword cExpandableExpandableKeyword_2_0 = (Keyword)cExpandableAssignment_2.eContents().get(0);
+		private final Assignment cClassTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cClassTypeClassTypeEnumRuleCall_3_0 = (RuleCall)cClassTypeAssignment_3.eContents().get(0);
+		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
+		private final Group cGroup_4_0 = (Group)cAlternatives_4.eContents().get(0);
+		private final Assignment cNameAssignment_4_0_0 = (Assignment)cGroup_4_0.eContents().get(0);
+		private final RuleCall cNameIDENTTerminalRuleCall_4_0_0_0 = (RuleCall)cNameAssignment_4_0_0.eContents().get(0);
+		private final Assignment cCommentAssignment_4_0_1 = (Assignment)cGroup_4_0.eContents().get(1);
+		private final RuleCall cCommentString_commentParserRuleCall_4_0_1_0 = (RuleCall)cCommentAssignment_4_0_1.eContents().get(0);
+		private final Group cGroup_4_1 = (Group)cAlternatives_4.eContents().get(1);
+		private final Keyword cExtendsKeyword_4_1_0 = (Keyword)cGroup_4_1.eContents().get(0);
+		private final RuleCall cIDENTTerminalRuleCall_4_1_1 = (RuleCall)cGroup_4_1.eContents().get(1);
+		private final Assignment cModificationAssignment_4_1_2 = (Assignment)cGroup_4_1.eContents().get(2);
+		private final RuleCall cModificationClass_modificationParserRuleCall_4_1_2_0 = (RuleCall)cModificationAssignment_4_1_2.eContents().get(0);
+		private final RuleCall cString_commentParserRuleCall_4_1_3 = (RuleCall)cGroup_4_1.eContents().get(3);
+		private final Assignment cElemListAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final RuleCall cElemListElementListParserRuleCall_5_0 = (RuleCall)cElemListAssignment_5.eContents().get(0);
+		private final Alternatives cAlternatives_6 = (Alternatives)cGroup.eContents().get(6);
+		private final Assignment cElemListAssignment_6_0 = (Assignment)cAlternatives_6.eContents().get(0);
+		private final RuleCall cElemListElementList2ParserRuleCall_6_0_0 = (RuleCall)cElemListAssignment_6_0.eContents().get(0);
+		private final Assignment cInitialEquationClausesAssignment_6_1 = (Assignment)cAlternatives_6.eContents().get(1);
+		private final RuleCall cInitialEquationClausesInitial_equation_rule_clauseParserRuleCall_6_1_0 = (RuleCall)cInitialEquationClausesAssignment_6_1.eContents().get(0);
+		private final Assignment cInitialAlgorithmClausesAssignment_6_2 = (Assignment)cAlternatives_6.eContents().get(2);
+		private final RuleCall cInitialAlgorithmClausesInitial_algorithm_clauseParserRuleCall_6_2_0 = (RuleCall)cInitialAlgorithmClausesAssignment_6_2.eContents().get(0);
+		private final Assignment cEquationClausesAssignment_6_3 = (Assignment)cAlternatives_6.eContents().get(3);
+		private final RuleCall cEquationClausesEquation_rule_clauseParserRuleCall_6_3_0 = (RuleCall)cEquationClausesAssignment_6_3.eContents().get(0);
+		private final Assignment cAlgorithmClausesAssignment_6_4 = (Assignment)cAlternatives_6.eContents().get(4);
+		private final RuleCall cAlgorithmClausesAlgorithm_clauseParserRuleCall_6_4_0 = (RuleCall)cAlgorithmClausesAssignment_6_4.eContents().get(0);
+		private final Assignment cExtClauseAssignment_7 = (Assignment)cGroup.eContents().get(7);
+		private final RuleCall cExtClauseExternal_clauseParserRuleCall_7_0 = (RuleCall)cExtClauseAssignment_7.eContents().get(0);
+		private final Keyword cEndKeyword_8 = (Keyword)cGroup.eContents().get(8);
+		private final RuleCall cIDENTTerminalRuleCall_9 = (RuleCall)cGroup.eContents().get(9);
+		
+		//ClassDefinition:
+		//  encapsulated?="encapsulated"? partial?="partial"? expandable?="expandable"?
+		//  classType=ClassType (name=IDENT comment=string_comment?|"extends" IDENT modification
+		//  =class_modification? string_comment?) elemList+=ElementList (elemList+=ElementList2
+		//  |initialEquationClauses+=initial_equation_rule_clause|initialAlgorithmClauses+=
+		//  initial_algorithm_clause|equationClauses+=equation_rule_clause|algorithmClauses
+		//  +=algorithm_clause)* extClause=external_clause? "end" IDENT; 
+		//
+		//
+		//	     
+		//	 
+		//	  
+		//            
+		//    
+		//		 
+		//		  
+		//		  
+		//		  
+		//		  
+		//	
+		//	    
+		//      
+		//	//| SUBTYPEOF type_specifier
+		public ParserRule getRule() { return rule; }
+
+		//encapsulated?="encapsulated"? partial?="partial"? expandable?="expandable"?
+		//classType=ClassType (name=IDENT comment=string_comment?|"extends" IDENT modification
+		//=class_modification? string_comment?) elemList+=ElementList (elemList+=ElementList2
+		//|initialEquationClauses+=initial_equation_rule_clause|initialAlgorithmClauses+=
+		//initial_algorithm_clause|equationClauses+=equation_rule_clause|algorithmClauses
+		//+=algorithm_clause)* extClause=external_clause? "end" IDENT 
+		//	     
+		//	 
+		//	  
+		//            
+		//    
+		//		 
+		//		  
+		//		  
+		//		  
+		//		  
+		//	
+		//	    
+		//      
+		//	//| SUBTYPEOF type_specifier
+		public Group getGroup() { return cGroup; }
+
+		//encapsulated?="encapsulated"?
+		public Assignment getEncapsulatedAssignment_0() { return cEncapsulatedAssignment_0; }
+
+		//"encapsulated"
+		public Keyword getEncapsulatedEncapsulatedKeyword_0_0() { return cEncapsulatedEncapsulatedKeyword_0_0; }
+
+		//partial?="partial"?
+		public Assignment getPartialAssignment_1() { return cPartialAssignment_1; }
+
+		//"partial"
+		public Keyword getPartialPartialKeyword_1_0() { return cPartialPartialKeyword_1_0; }
+
+		//expandable?="expandable"?
+		public Assignment getExpandableAssignment_2() { return cExpandableAssignment_2; }
+
+		//"expandable"
+		public Keyword getExpandableExpandableKeyword_2_0() { return cExpandableExpandableKeyword_2_0; }
+
+		//classType=ClassType
+		public Assignment getClassTypeAssignment_3() { return cClassTypeAssignment_3; }
+
+		//ClassType
+		public RuleCall getClassTypeClassTypeEnumRuleCall_3_0() { return cClassTypeClassTypeEnumRuleCall_3_0; }
+
+		//name=IDENT comment=string_comment?|"extends" IDENT modification=class_modification?
+		//string_comment?
+		public Alternatives getAlternatives_4() { return cAlternatives_4; }
+
+		//name=IDENT comment=string_comment?
+		public Group getGroup_4_0() { return cGroup_4_0; }
+
+		//name=IDENT
+		public Assignment getNameAssignment_4_0_0() { return cNameAssignment_4_0_0; }
+
+		//IDENT
+		public RuleCall getNameIDENTTerminalRuleCall_4_0_0_0() { return cNameIDENTTerminalRuleCall_4_0_0_0; }
+
+		//comment=string_comment?
+		public Assignment getCommentAssignment_4_0_1() { return cCommentAssignment_4_0_1; }
+
+		//string_comment
+		public RuleCall getCommentString_commentParserRuleCall_4_0_1_0() { return cCommentString_commentParserRuleCall_4_0_1_0; }
+
+		//"extends" IDENT modification=class_modification? string_comment?
+		public Group getGroup_4_1() { return cGroup_4_1; }
+
+		//"extends"
+		public Keyword getExtendsKeyword_4_1_0() { return cExtendsKeyword_4_1_0; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_4_1_1() { return cIDENTTerminalRuleCall_4_1_1; }
+
+		//modification=class_modification?
+		public Assignment getModificationAssignment_4_1_2() { return cModificationAssignment_4_1_2; }
+
+		//class_modification
+		public RuleCall getModificationClass_modificationParserRuleCall_4_1_2_0() { return cModificationClass_modificationParserRuleCall_4_1_2_0; }
+
+		//string_comment?
+		public RuleCall getString_commentParserRuleCall_4_1_3() { return cString_commentParserRuleCall_4_1_3; }
+
+		//elemList+=ElementList
+		public Assignment getElemListAssignment_5() { return cElemListAssignment_5; }
+
+		//ElementList
+		public RuleCall getElemListElementListParserRuleCall_5_0() { return cElemListElementListParserRuleCall_5_0; }
+
+		//(elemList+=ElementList2|initialEquationClauses+=initial_equation_rule_clause|
+		//initialAlgorithmClauses+=initial_algorithm_clause|equationClauses+=
+		//equation_rule_clause|algorithmClauses+=algorithm_clause)*
+		public Alternatives getAlternatives_6() { return cAlternatives_6; }
+
+		//elemList+=ElementList2
+		public Assignment getElemListAssignment_6_0() { return cElemListAssignment_6_0; }
+
+		//ElementList2
+		public RuleCall getElemListElementList2ParserRuleCall_6_0_0() { return cElemListElementList2ParserRuleCall_6_0_0; }
+
+		//initialEquationClauses+=initial_equation_rule_clause
+		public Assignment getInitialEquationClausesAssignment_6_1() { return cInitialEquationClausesAssignment_6_1; }
+
+		//initial_equation_rule_clause
+		public RuleCall getInitialEquationClausesInitial_equation_rule_clauseParserRuleCall_6_1_0() { return cInitialEquationClausesInitial_equation_rule_clauseParserRuleCall_6_1_0; }
+
+		//initialAlgorithmClauses+=initial_algorithm_clause
+		public Assignment getInitialAlgorithmClausesAssignment_6_2() { return cInitialAlgorithmClausesAssignment_6_2; }
+
+		//initial_algorithm_clause
+		public RuleCall getInitialAlgorithmClausesInitial_algorithm_clauseParserRuleCall_6_2_0() { return cInitialAlgorithmClausesInitial_algorithm_clauseParserRuleCall_6_2_0; }
+
+		//equationClauses+=equation_rule_clause
+		public Assignment getEquationClausesAssignment_6_3() { return cEquationClausesAssignment_6_3; }
+
+		//equation_rule_clause
+		public RuleCall getEquationClausesEquation_rule_clauseParserRuleCall_6_3_0() { return cEquationClausesEquation_rule_clauseParserRuleCall_6_3_0; }
+
+		//algorithmClauses+=algorithm_clause
+		public Assignment getAlgorithmClausesAssignment_6_4() { return cAlgorithmClausesAssignment_6_4; }
+
+		//algorithm_clause
+		public RuleCall getAlgorithmClausesAlgorithm_clauseParserRuleCall_6_4_0() { return cAlgorithmClausesAlgorithm_clauseParserRuleCall_6_4_0; }
+
+		//extClause=external_clause?
+		public Assignment getExtClauseAssignment_7() { return cExtClauseAssignment_7; }
+
+		//external_clause
+		public RuleCall getExtClauseExternal_clauseParserRuleCall_7_0() { return cExtClauseExternal_clauseParserRuleCall_7_0; }
+
+		//"end"
+		public Keyword getEndKeyword_8() { return cEndKeyword_8; }
+
+		//IDENT   
+		//	//| SUBTYPEOF type_specifier
+		public RuleCall getIDENTTerminalRuleCall_9() { return cIDENTTerminalRuleCall_9; }
+	}
+
+	public class PartialDerivativeElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PartialDerivative");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cFunctionKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDENTTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final Keyword cDerKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Keyword cLeftParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final RuleCall cName_pathParserRuleCall_5 = (RuleCall)cGroup.eContents().get(5);
+		private final Keyword cCommaKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final RuleCall cIdent_listParserRuleCall_7 = (RuleCall)cGroup.eContents().get(7);
+		private final Keyword cRightParenthesisKeyword_8 = (Keyword)cGroup.eContents().get(8);
+		private final Assignment cCommentAssignment_9 = (Assignment)cGroup.eContents().get(9);
+		private final RuleCall cCommentCommentParserRuleCall_9_0 = (RuleCall)cCommentAssignment_9.eContents().get(0);
+		
+		//PartialDerivative:
+		//  "function" name=IDENT EQUALS "der" "(" name_path "," ident_list ")" comment=comment;
+		public ParserRule getRule() { return rule; }
+
+		//"function" name=IDENT EQUALS "der" "(" name_path "," ident_list ")" comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//"function"
+		public Keyword getFunctionKeyword_0() { return cFunctionKeyword_0; }
+
+		//name=IDENT
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//IDENT
+		public RuleCall getNameIDENTTerminalRuleCall_1_0() { return cNameIDENTTerminalRuleCall_1_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_2() { return cEQUALSTerminalRuleCall_2; }
+
+		//"der"
+		public Keyword getDerKeyword_3() { return cDerKeyword_3; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_4() { return cLeftParenthesisKeyword_4; }
+
+		//name_path
+		public RuleCall getName_pathParserRuleCall_5() { return cName_pathParserRuleCall_5; }
+
+		//","
+		public Keyword getCommaKeyword_6() { return cCommaKeyword_6; }
+
+		//ident_list
+		public RuleCall getIdent_listParserRuleCall_7() { return cIdent_listParserRuleCall_7; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_8() { return cRightParenthesisKeyword_8; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_9() { return cCommentAssignment_9; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_9_0() { return cCommentCommentParserRuleCall_9_0; }
+	}
+
+	public class ClassModificationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ClassModification");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cClassTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cClassTypeClassTypeEnumRuleCall_0_0 = (RuleCall)cClassTypeAssignment_0.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDENTTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final RuleCall cType_prefixParserRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		private final Assignment cTypeSpecifierAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cTypeSpecifierType_specifierParserRuleCall_4_0 = (RuleCall)cTypeSpecifierAssignment_4.eContents().get(0);
+		private final Assignment cModificationAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final RuleCall cModificationClass_modificationParserRuleCall_5_0 = (RuleCall)cModificationAssignment_5.eContents().get(0);
+		private final Assignment cCommentAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cCommentCommentParserRuleCall_6_0 = (RuleCall)cCommentAssignment_6.eContents().get(0);
+		
+		//ClassModification:
+		//  classType=ClassType name=IDENT EQUALS type_prefix typeSpecifier=type_specifier
+		//  modification=class_modification? comment=comment;
+		public ParserRule getRule() { return rule; }
+
+		//classType=ClassType name=IDENT EQUALS type_prefix typeSpecifier=type_specifier
+		//modification=class_modification? comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//classType=ClassType
+		public Assignment getClassTypeAssignment_0() { return cClassTypeAssignment_0; }
+
+		//ClassType
+		public RuleCall getClassTypeClassTypeEnumRuleCall_0_0() { return cClassTypeClassTypeEnumRuleCall_0_0; }
+
+		//name=IDENT
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//IDENT
+		public RuleCall getNameIDENTTerminalRuleCall_1_0() { return cNameIDENTTerminalRuleCall_1_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_2() { return cEQUALSTerminalRuleCall_2; }
+
+		//type_prefix
+		public RuleCall getType_prefixParserRuleCall_3() { return cType_prefixParserRuleCall_3; }
+
+		//typeSpecifier=type_specifier
+		public Assignment getTypeSpecifierAssignment_4() { return cTypeSpecifierAssignment_4; }
+
+		//type_specifier
+		public RuleCall getTypeSpecifierType_specifierParserRuleCall_4_0() { return cTypeSpecifierType_specifierParserRuleCall_4_0; }
+
+		//modification=class_modification?
+		public Assignment getModificationAssignment_5() { return cModificationAssignment_5; }
+
+		//class_modification
+		public RuleCall getModificationClass_modificationParserRuleCall_5_0() { return cModificationClass_modificationParserRuleCall_5_0; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_6() { return cCommentAssignment_6; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_6_0() { return cCommentCommentParserRuleCall_6_0; }
+	}
+
+	public class ClassOverloadingElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ClassOverloading");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cClassTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cClassTypeClassTypeEnumRuleCall_0_0 = (RuleCall)cClassTypeAssignment_0.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDENTTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final Keyword cOverloadKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Keyword cLeftParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final RuleCall cName_listParserRuleCall_5 = (RuleCall)cGroup.eContents().get(5);
+		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final Assignment cCommentAssignment_7 = (Assignment)cGroup.eContents().get(7);
+		private final RuleCall cCommentCommentParserRuleCall_7_0 = (RuleCall)cCommentAssignment_7.eContents().get(0);
+		
+		//ClassOverloading:
+		//  classType=ClassType name=IDENT EQUALS "overload" "(" name_list ")" comment=comment;
+		public ParserRule getRule() { return rule; }
+
+		//classType=ClassType name=IDENT EQUALS "overload" "(" name_list ")" comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//classType=ClassType
+		public Assignment getClassTypeAssignment_0() { return cClassTypeAssignment_0; }
+
+		//ClassType
+		public RuleCall getClassTypeClassTypeEnumRuleCall_0_0() { return cClassTypeClassTypeEnumRuleCall_0_0; }
+
+		//name=IDENT
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//IDENT
+		public RuleCall getNameIDENTTerminalRuleCall_1_0() { return cNameIDENTTerminalRuleCall_1_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_2() { return cEQUALSTerminalRuleCall_2; }
+
+		//"overload"
+		public Keyword getOverloadKeyword_3() { return cOverloadKeyword_3; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_4() { return cLeftParenthesisKeyword_4; }
+
+		//name_list
+		public RuleCall getName_listParserRuleCall_5() { return cName_listParserRuleCall_5; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_6() { return cRightParenthesisKeyword_6; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_7() { return cCommentAssignment_7; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_7_0() { return cCommentCommentParserRuleCall_7_0; }
+	}
+
+	public class EnumerationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Enumeration");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cClassTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cClassTypeClassTypeEnumRuleCall_0_0 = (RuleCall)cClassTypeAssignment_0.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDENTTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final Keyword cEnumerationKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final RuleCall cLPARTerminalRuleCall_4 = (RuleCall)cGroup.eContents().get(4);
+		private final Alternatives cAlternatives_5 = (Alternatives)cGroup.eContents().get(5);
+		private final Group cGroup_5_0 = (Group)cAlternatives_5.eContents().get(0);
+		private final Assignment cIdentAssignment_5_0_0 = (Assignment)cGroup_5_0.eContents().get(0);
+		private final RuleCall cIdentIDENTTerminalRuleCall_5_0_0_0 = (RuleCall)cIdentAssignment_5_0_0.eContents().get(0);
+		private final Assignment cEnumCommentsAssignment_5_0_1 = (Assignment)cGroup_5_0.eContents().get(1);
+		private final RuleCall cEnumCommentsCommentParserRuleCall_5_0_1_0 = (RuleCall)cEnumCommentsAssignment_5_0_1.eContents().get(0);
+		private final Group cGroup_5_0_2 = (Group)cGroup_5_0.eContents().get(2);
+		private final RuleCall cCOMMATerminalRuleCall_5_0_2_0 = (RuleCall)cGroup_5_0_2.eContents().get(0);
+		private final Assignment cIdentAssignment_5_0_2_1 = (Assignment)cGroup_5_0_2.eContents().get(1);
+		private final RuleCall cIdentIDENTTerminalRuleCall_5_0_2_1_0 = (RuleCall)cIdentAssignment_5_0_2_1.eContents().get(0);
+		private final Assignment cEnumCommentsAssignment_5_0_2_2 = (Assignment)cGroup_5_0_2.eContents().get(2);
+		private final RuleCall cEnumCommentsCommentParserRuleCall_5_0_2_2_0 = (RuleCall)cEnumCommentsAssignment_5_0_2_2.eContents().get(0);
+		private final RuleCall cCOLONTerminalRuleCall_5_1 = (RuleCall)cAlternatives_5.eContents().get(1);
+		private final RuleCall cRPARTerminalRuleCall_6 = (RuleCall)cGroup.eContents().get(6);
+		private final Assignment cCommentAssignment_7 = (Assignment)cGroup.eContents().get(7);
+		private final RuleCall cCommentCommentParserRuleCall_7_0 = (RuleCall)cCommentAssignment_7.eContents().get(0);
+		
+		//Enumeration:
+		//  classType=ClassType name=IDENT EQUALS "enumeration" LPAR (ident+=IDENT enumComments+=
+		//  comment (COMMA ident+=IDENT enumComments+=comment)*|COLON) RPAR comment=comment;
+		public ParserRule getRule() { return rule; }
+
+		//classType=ClassType name=IDENT EQUALS "enumeration" LPAR (ident+=IDENT enumComments+=
+		//comment (COMMA ident+=IDENT enumComments+=comment)*|COLON) RPAR comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//classType=ClassType
+		public Assignment getClassTypeAssignment_0() { return cClassTypeAssignment_0; }
+
+		//ClassType
+		public RuleCall getClassTypeClassTypeEnumRuleCall_0_0() { return cClassTypeClassTypeEnumRuleCall_0_0; }
+
+		//name=IDENT
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//IDENT
+		public RuleCall getNameIDENTTerminalRuleCall_1_0() { return cNameIDENTTerminalRuleCall_1_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_2() { return cEQUALSTerminalRuleCall_2; }
+
+		//"enumeration"
+		public Keyword getEnumerationKeyword_3() { return cEnumerationKeyword_3; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_4() { return cLPARTerminalRuleCall_4; }
+
+		//ident+=IDENT enumComments+=comment (COMMA ident+=IDENT enumComments+=comment)*|COLON
+		public Alternatives getAlternatives_5() { return cAlternatives_5; }
+
+		//ident+=IDENT enumComments+=comment (COMMA ident+=IDENT enumComments+=comment)*
+		public Group getGroup_5_0() { return cGroup_5_0; }
+
+		//ident+=IDENT
+		public Assignment getIdentAssignment_5_0_0() { return cIdentAssignment_5_0_0; }
+
+		//IDENT
+		public RuleCall getIdentIDENTTerminalRuleCall_5_0_0_0() { return cIdentIDENTTerminalRuleCall_5_0_0_0; }
+
+		//enumComments+=comment
+		public Assignment getEnumCommentsAssignment_5_0_1() { return cEnumCommentsAssignment_5_0_1; }
+
+		//comment
+		public RuleCall getEnumCommentsCommentParserRuleCall_5_0_1_0() { return cEnumCommentsCommentParserRuleCall_5_0_1_0; }
+
+		//(COMMA ident+=IDENT enumComments+=comment)*
+		public Group getGroup_5_0_2() { return cGroup_5_0_2; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_5_0_2_0() { return cCOMMATerminalRuleCall_5_0_2_0; }
+
+		//ident+=IDENT
+		public Assignment getIdentAssignment_5_0_2_1() { return cIdentAssignment_5_0_2_1; }
+
+		//IDENT
+		public RuleCall getIdentIDENTTerminalRuleCall_5_0_2_1_0() { return cIdentIDENTTerminalRuleCall_5_0_2_1_0; }
+
+		//enumComments+=comment
+		public Assignment getEnumCommentsAssignment_5_0_2_2() { return cEnumCommentsAssignment_5_0_2_2; }
+
+		//comment
+		public RuleCall getEnumCommentsCommentParserRuleCall_5_0_2_2_0() { return cEnumCommentsCommentParserRuleCall_5_0_2_2_0; }
+
+		//COLON
+		public RuleCall getCOLONTerminalRuleCall_5_1() { return cCOLONTerminalRuleCall_5_1; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_6() { return cRPARTerminalRuleCall_6; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_7() { return cCommentAssignment_7; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_7_0() { return cCommentCommentParserRuleCall_7_0; }
+	}
+
+	public class Ident_listElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ident_list");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cCOMMATerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cIDENTTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//ident_list returns ecore::EString:
+		//  IDENT (COMMA IDENT)*;
+		public ParserRule getRule() { return rule; }
+
+		//IDENT (COMMA IDENT)*
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//(COMMA IDENT)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_0() { return cCOMMATerminalRuleCall_1_0; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_1_1() { return cIDENTTerminalRuleCall_1_1; }
+	}
+
+	public class Name_listElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "name_list");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cName_pathParserRuleCall_0 = (RuleCall)cGroup.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 RuleCall cName_pathParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//name_list returns ecore::EString:
+		//  name_path ("," name_path)*;
+		public ParserRule getRule() { return rule; }
+
+		//name_path ("," name_path)*
+		public Group getGroup() { return cGroup; }
+
+		//name_path
+		public RuleCall getName_pathParserRuleCall_0() { return cName_pathParserRuleCall_0; }
+
+		//("," name_path)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//","
+		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
+
+		//name_path
+		public RuleCall getName_pathParserRuleCall_1_1() { return cName_pathParserRuleCall_1_1; }
+	}
+
+	public class External_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "external_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cExternalKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cLanguageSpecificationAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cLanguageSpecificationSTRINGTerminalRuleCall_1_0 = (RuleCall)cLanguageSpecificationAssignment_1.eContents().get(0);
+		private final RuleCall cExternal_function_callParserRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final Assignment cAnnotationAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cAnnotationAnnotationParserRuleCall_3_0 = (RuleCall)cAnnotationAssignment_3.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_4 = (RuleCall)cGroup.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Assignment cExtAnnotationAssignment_5_0 = (Assignment)cGroup_5.eContents().get(0);
+		private final RuleCall cExtAnnotationAnnotationParserRuleCall_5_0_0 = (RuleCall)cExtAnnotationAssignment_5_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_5_1 = (RuleCall)cGroup_5.eContents().get(1);
+		
+		//external_clause returns ExternalClause:
+		//  "external" languageSpecification=STRING? external_function_call? annotation=
+		//  annotation? SEMICOLON (extAnnotation=annotation SEMICOLON)?;
+		public ParserRule getRule() { return rule; }
+
+		//"external" languageSpecification=STRING? external_function_call? annotation=
+		//annotation? SEMICOLON (extAnnotation=annotation SEMICOLON)?
+		public Group getGroup() { return cGroup; }
+
+		//"external"
+		public Keyword getExternalKeyword_0() { return cExternalKeyword_0; }
+
+		//languageSpecification=STRING?
+		public Assignment getLanguageSpecificationAssignment_1() { return cLanguageSpecificationAssignment_1; }
+
+		//STRING
+		public RuleCall getLanguageSpecificationSTRINGTerminalRuleCall_1_0() { return cLanguageSpecificationSTRINGTerminalRuleCall_1_0; }
+
+		//external_function_call?
+		public RuleCall getExternal_function_callParserRuleCall_2() { return cExternal_function_callParserRuleCall_2; }
+
+		//annotation=annotation?
+		public Assignment getAnnotationAssignment_3() { return cAnnotationAssignment_3; }
+
+		//annotation
+		public RuleCall getAnnotationAnnotationParserRuleCall_3_0() { return cAnnotationAnnotationParserRuleCall_3_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_4() { return cSEMICOLONTerminalRuleCall_4; }
+
+		//(extAnnotation=annotation SEMICOLON)?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//extAnnotation=annotation
+		public Assignment getExtAnnotationAssignment_5_0() { return cExtAnnotationAssignment_5_0; }
+
+		//annotation
+		public RuleCall getExtAnnotationAnnotationParserRuleCall_5_0_0() { return cExtAnnotationAnnotationParserRuleCall_5_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_5_1() { return cSEMICOLONTerminalRuleCall_5_1; }
+	}
+
+	public class External_function_callElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "external_function_call");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
+		private final RuleCall cComponent_referenceParserRuleCall_0_0 = (RuleCall)cGroup_0.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final RuleCall cLPARTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final RuleCall cExpression_listParserRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		private final RuleCall cRPARTerminalRuleCall_4 = (RuleCall)cGroup.eContents().get(4);
+		
+		//external_function_call returns ecore::EString:
+		//  (component_reference EQUALS)? IDENT LPAR expression_list? RPAR;
+		public ParserRule getRule() { return rule; }
+
+		//(component_reference EQUALS)? IDENT LPAR expression_list? RPAR
+		public Group getGroup() { return cGroup; }
+
+		//(component_reference EQUALS)?
+		public Group getGroup_0() { return cGroup_0; }
+
+		//component_reference
+		public RuleCall getComponent_referenceParserRuleCall_0_0() { return cComponent_referenceParserRuleCall_0_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_0_1() { return cEQUALSTerminalRuleCall_0_1; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_1() { return cIDENTTerminalRuleCall_1; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_2() { return cLPARTerminalRuleCall_2; }
+
+		//expression_list?
+		public RuleCall getExpression_listParserRuleCall_3() { return cExpression_listParserRuleCall_3; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_4() { return cRPARTerminalRuleCall_4; }
+	}
+
+	public class ElementListElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ElementList");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Assignment cElementsAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
+		private final RuleCall cElementsClassElementParserRuleCall_0_0_0 = (RuleCall)cElementsAssignment_0_0.eContents().get(0);
+		private final Assignment cAnnotationsAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
+		private final RuleCall cAnnotationsAnnotationParserRuleCall_0_1_0 = (RuleCall)cAnnotationsAssignment_0_1.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//ElementList:
+		//  ((elements+=ClassElement|annotations+=annotation) SEMICOLON)*;
+		public ParserRule getRule() { return rule; }
+
+		//((elements+=ClassElement|annotations+=annotation) SEMICOLON)*
+		public Group getGroup() { return cGroup; }
+
+		//elements+=ClassElement|annotations+=annotation
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//elements+=ClassElement
+		public Assignment getElementsAssignment_0_0() { return cElementsAssignment_0_0; }
+
+		//ClassElement
+		public RuleCall getElementsClassElementParserRuleCall_0_0_0() { return cElementsClassElementParserRuleCall_0_0_0; }
+
+		//annotations+=annotation
+		public Assignment getAnnotationsAssignment_0_1() { return cAnnotationsAssignment_0_1; }
+
+		//annotation
+		public RuleCall getAnnotationsAnnotationParserRuleCall_0_1_0() { return cAnnotationsAnnotationParserRuleCall_0_1_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_1() { return cSEMICOLONTerminalRuleCall_1; }
+	}
+
+	public class ElementList2Elements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ElementList2");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final Keyword cPublicKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final Action cPublicElementListAction_0_1 = (Action)cGroup_0.eContents().get(1);
+		private final Group cGroup_0_2 = (Group)cGroup_0.eContents().get(2);
+		private final Alternatives cAlternatives_0_2_0 = (Alternatives)cGroup_0_2.eContents().get(0);
+		private final Assignment cElementsAssignment_0_2_0_0 = (Assignment)cAlternatives_0_2_0.eContents().get(0);
+		private final RuleCall cElementsClassElementParserRuleCall_0_2_0_0_0 = (RuleCall)cElementsAssignment_0_2_0_0.eContents().get(0);
+		private final Assignment cAnnotationsAssignment_0_2_0_1 = (Assignment)cAlternatives_0_2_0.eContents().get(1);
+		private final RuleCall cAnnotationsAnnotationParserRuleCall_0_2_0_1_0 = (RuleCall)cAnnotationsAssignment_0_2_0_1.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_0_2_1 = (RuleCall)cGroup_0_2.eContents().get(1);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Keyword cProtectedKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Action cProtectesElementListAction_1_1 = (Action)cGroup_1.eContents().get(1);
+		private final Group cGroup_1_2 = (Group)cGroup_1.eContents().get(2);
+		private final Alternatives cAlternatives_1_2_0 = (Alternatives)cGroup_1_2.eContents().get(0);
+		private final Assignment cElementsAssignment_1_2_0_0 = (Assignment)cAlternatives_1_2_0.eContents().get(0);
+		private final RuleCall cElementsClassElementParserRuleCall_1_2_0_0_0 = (RuleCall)cElementsAssignment_1_2_0_0.eContents().get(0);
+		private final Assignment cAnnotationsAssignment_1_2_0_1 = (Assignment)cAlternatives_1_2_0.eContents().get(1);
+		private final RuleCall cAnnotationsAnnotationParserRuleCall_1_2_0_1_0 = (RuleCall)cAnnotationsAssignment_1_2_0_1.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_1_2_1 = (RuleCall)cGroup_1_2.eContents().get(1);
+		
+		//ElementList2 returns ElementList:
+		//  "public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+		//  SEMICOLON)*|"protected" {ProtectesElementList} ((elements+=ClassElement|
+		//  annotations+=annotation) SEMICOLON)*;
+		public ParserRule getRule() { return rule; }
+
+		//"public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+		//SEMICOLON)*|"protected" {ProtectesElementList} ((elements+=ClassElement|
+		//annotations+=annotation) SEMICOLON)*
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//"public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+		//SEMICOLON)*
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"public"
+		public Keyword getPublicKeyword_0_0() { return cPublicKeyword_0_0; }
+
+		//{PublicElementList}
+		public Action getPublicElementListAction_0_1() { return cPublicElementListAction_0_1; }
+
+		//((elements+=ClassElement|annotations+=annotation) SEMICOLON)*
+		public Group getGroup_0_2() { return cGroup_0_2; }
+
+		//elements+=ClassElement|annotations+=annotation
+		public Alternatives getAlternatives_0_2_0() { return cAlternatives_0_2_0; }
+
+		//elements+=ClassElement
+		public Assignment getElementsAssignment_0_2_0_0() { return cElementsAssignment_0_2_0_0; }
+
+		//ClassElement
+		public RuleCall getElementsClassElementParserRuleCall_0_2_0_0_0() { return cElementsClassElementParserRuleCall_0_2_0_0_0; }
+
+		//annotations+=annotation
+		public Assignment getAnnotationsAssignment_0_2_0_1() { return cAnnotationsAssignment_0_2_0_1; }
+
+		//annotation
+		public RuleCall getAnnotationsAnnotationParserRuleCall_0_2_0_1_0() { return cAnnotationsAnnotationParserRuleCall_0_2_0_1_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_0_2_1() { return cSEMICOLONTerminalRuleCall_0_2_1; }
+
+		//"protected" {ProtectesElementList} ((elements+=ClassElement|annotations+=
+		//annotation) SEMICOLON)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"protected"
+		public Keyword getProtectedKeyword_1_0() { return cProtectedKeyword_1_0; }
+
+		//{ProtectesElementList}
+		public Action getProtectesElementListAction_1_1() { return cProtectesElementListAction_1_1; }
+
+		//((elements+=ClassElement|annotations+=annotation) SEMICOLON)*
+		public Group getGroup_1_2() { return cGroup_1_2; }
+
+		//elements+=ClassElement|annotations+=annotation
+		public Alternatives getAlternatives_1_2_0() { return cAlternatives_1_2_0; }
+
+		//elements+=ClassElement
+		public Assignment getElementsAssignment_1_2_0_0() { return cElementsAssignment_1_2_0_0; }
+
+		//ClassElement
+		public RuleCall getElementsClassElementParserRuleCall_1_2_0_0_0() { return cElementsClassElementParserRuleCall_1_2_0_0_0; }
+
+		//annotations+=annotation
+		public Assignment getAnnotationsAssignment_1_2_0_1() { return cAnnotationsAssignment_1_2_0_1; }
+
+		//annotation
+		public RuleCall getAnnotationsAnnotationParserRuleCall_1_2_0_1_0() { return cAnnotationsAnnotationParserRuleCall_1_2_0_1_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_1_2_1() { return cSEMICOLONTerminalRuleCall_1_2_1; }
+	}
+
+	public class ClassElementElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ClassElement");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cImport_clauseParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cExtends_clauseParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
+		private final Keyword cRedeclareKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Keyword cFinalKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		private final Keyword cInnerKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+		private final Keyword cOuterKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
+		private final Alternatives cAlternatives_2_4 = (Alternatives)cGroup_2.eContents().get(4);
+		private final Alternatives cAlternatives_2_4_0 = (Alternatives)cAlternatives_2_4.eContents().get(0);
+		private final RuleCall cClassDefinitionParserRuleCall_2_4_0_0 = (RuleCall)cAlternatives_2_4_0.eContents().get(0);
+		private final RuleCall cComponent_clauseParserRuleCall_2_4_0_1 = (RuleCall)cAlternatives_2_4_0.eContents().get(1);
+		private final RuleCall cReplaceableElementClauseParserRuleCall_2_4_1 = (RuleCall)cAlternatives_2_4.eContents().get(1);
+		
+		//ClassElement:
+		//  import_clause|extends_clause|"redeclare"? "final"? "inner"? "outer"? ((
+		//  ClassDefinition|component_clause)|ReplaceableElementClause); 
+		//
+		//
+		//
+		//	  
+		//	  
+		//	//| defineunit_clause
+		public ParserRule getRule() { return rule; }
+
+		//import_clause|extends_clause|"redeclare"? "final"? "inner"? "outer"? ((
+		//ClassDefinition|component_clause)|ReplaceableElementClause) 
+		//
+		//
+		//
+		//	  
+		//	  
+		//	//| defineunit_clause
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//import_clause
+		public RuleCall getImport_clauseParserRuleCall_0() { return cImport_clauseParserRuleCall_0; }
+
+		//extends_clause   
+		//	//| defineunit_clause
+		public RuleCall getExtends_clauseParserRuleCall_1() { return cExtends_clauseParserRuleCall_1; }
+
+		//"redeclare"? "final"? "inner"? "outer"? ((ClassDefinition|component_clause)|
+		//ReplaceableElementClause) 
+		//	  
+		//	  
+		//	//| defineunit_clause
+		public Group getGroup_2() { return cGroup_2; }
+
+		//"redeclare"?
+		public Keyword getRedeclareKeyword_2_0() { return cRedeclareKeyword_2_0; }
+
+		//"final"?
+		public Keyword getFinalKeyword_2_1() { return cFinalKeyword_2_1; }
+
+		//"inner"?
+		public Keyword getInnerKeyword_2_2() { return cInnerKeyword_2_2; }
+
+		//"outer"?
+		public Keyword getOuterKeyword_2_3() { return cOuterKeyword_2_3; }
+
+		//(ClassDefinition|component_clause)|ReplaceableElementClause
+		public Alternatives getAlternatives_2_4() { return cAlternatives_2_4; }
+
+		//ClassDefinition|component_clause
+		public Alternatives getAlternatives_2_4_0() { return cAlternatives_2_4_0; }
+
+		//ClassDefinition
+		public RuleCall getClassDefinitionParserRuleCall_2_4_0_0() { return cClassDefinitionParserRuleCall_2_4_0_0; }
+
+		//component_clause
+		public RuleCall getComponent_clauseParserRuleCall_2_4_0_1() { return cComponent_clauseParserRuleCall_2_4_0_1; }
+
+		//ReplaceableElementClause
+		public RuleCall getReplaceableElementClauseParserRuleCall_2_4_1() { return cReplaceableElementClauseParserRuleCall_2_4_1; }
+	}
+
+	public class ReplaceableElementClauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ReplaceableElementClause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cReplaceableKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cEntityAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final Alternatives cEntityAlternatives_1_0 = (Alternatives)cEntityAssignment_1.eContents().get(0);
+		private final RuleCall cEntityClassDefinitionParserRuleCall_1_0_0 = (RuleCall)cEntityAlternatives_1_0.eContents().get(0);
+		private final RuleCall cEntityComponent_clauseParserRuleCall_1_0_1 = (RuleCall)cEntityAlternatives_1_0.eContents().get(1);
+		private final Assignment cConstrainAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cConstrainConstraining_clauseParserRuleCall_2_0 = (RuleCall)cConstrainAssignment_2.eContents().get(0);
+		
+		//ReplaceableElementClause:
+		//  "replaceable" entity=( ClassDefinition | component_clause ) constrain=
+		//  constraining_clause?;
+		public ParserRule getRule() { return rule; }
+
+		//"replaceable" entity=( ClassDefinition | component_clause ) constrain=
+		//constraining_clause?
+		public Group getGroup() { return cGroup; }
+
+		//"replaceable"
+		public Keyword getReplaceableKeyword_0() { return cReplaceableKeyword_0; }
+
+		//entity=( ClassDefinition | component_clause )
+		public Assignment getEntityAssignment_1() { return cEntityAssignment_1; }
+
+		//ClassDefinition|component_clause
+		public Alternatives getEntityAlternatives_1_0() { return cEntityAlternatives_1_0; }
+
+		//ClassDefinition
+		public RuleCall getEntityClassDefinitionParserRuleCall_1_0_0() { return cEntityClassDefinitionParserRuleCall_1_0_0; }
+
+		//component_clause
+		public RuleCall getEntityComponent_clauseParserRuleCall_1_0_1() { return cEntityComponent_clauseParserRuleCall_1_0_1; }
+
+		//constrain=constraining_clause?
+		public Assignment getConstrainAssignment_2() { return cConstrainAssignment_2; }
+
+		//constraining_clause
+		public RuleCall getConstrainConstraining_clauseParserRuleCall_2_0() { return cConstrainConstraining_clauseParserRuleCall_2_0; }
+	}
+
+	public class Import_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "import_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cImportKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final Assignment cAsNameAssignment_1_0_0 = (Assignment)cGroup_1_0.eContents().get(0);
+		private final RuleCall cAsNameIDENTTerminalRuleCall_1_0_0_0 = (RuleCall)cAsNameAssignment_1_0_0.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_1_0_1 = (RuleCall)cGroup_1_0.eContents().get(1);
+		private final Assignment cNameAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
+		private final RuleCall cNameName_pathParserRuleCall_1_0_2_0 = (RuleCall)cNameAssignment_1_0_2.eContents().get(0);
+		private final Assignment cNameAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
+		private final RuleCall cNameName_path_starParserRuleCall_1_1_0 = (RuleCall)cNameAssignment_1_1.eContents().get(0);
+		private final Assignment cCommentAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cCommentCommentParserRuleCall_2_0 = (RuleCall)cCommentAssignment_2.eContents().get(0);
+		
+		//import_clause returns ImportClause:
+		//  "import" (asName=IDENT EQUALS name=name_path|name=name_path_star) comment=comment; 
+		//
+		//    
+		//	            
+		//	
+		//
+		/// *
+		//defineunit_clause :
+		//	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+		//	;
+		// * /
+		//
+		//
+		/// *
+		// * 2.2.3 Extends
+		// * /
+		//
+		//// Note that this is a minor modification of the standard by
+		//// allowing the comment.
+		public ParserRule getRule() { return rule; }
+
+		//"import" (asName=IDENT EQUALS name=name_path|name=name_path_star) comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//"import"
+		public Keyword getImportKeyword_0() { return cImportKeyword_0; }
+
+		//asName=IDENT EQUALS name=name_path|name=name_path_star
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//asName=IDENT EQUALS name=name_path
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//asName=IDENT
+		public Assignment getAsNameAssignment_1_0_0() { return cAsNameAssignment_1_0_0; }
+
+		//IDENT
+		public RuleCall getAsNameIDENTTerminalRuleCall_1_0_0_0() { return cAsNameIDENTTerminalRuleCall_1_0_0_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_1_0_1() { return cEQUALSTerminalRuleCall_1_0_1; }
+
+		//name=name_path
+		public Assignment getNameAssignment_1_0_2() { return cNameAssignment_1_0_2; }
+
+		//name_path
+		public RuleCall getNameName_pathParserRuleCall_1_0_2_0() { return cNameName_pathParserRuleCall_1_0_2_0; }
+
+		//name=name_path_star
+		public Assignment getNameAssignment_1_1() { return cNameAssignment_1_1; }
+
+		//name_path_star
+		public RuleCall getNameName_path_starParserRuleCall_1_1_0() { return cNameName_path_starParserRuleCall_1_1_0; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_2() { return cCommentAssignment_2; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_2_0() { return cCommentCommentParserRuleCall_2_0; }
+	}
+
+	public class Extends_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "extends_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cExtendsKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cBaseClassAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cBaseClassName_pathParserRuleCall_1_0 = (RuleCall)cBaseClassAssignment_1.eContents().get(0);
+		private final Assignment cModificationAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cModificationClass_modificationParserRuleCall_2_0 = (RuleCall)cModificationAssignment_2.eContents().get(0);
+		private final Assignment cAnnotationAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cAnnotationAnnotationParserRuleCall_3_0 = (RuleCall)cAnnotationAssignment_3.eContents().get(0);
+		
+		//extends_clause returns ExtendsClause:
+		//  "extends" baseClass=name_path modification=class_modification? annotation=
+		//  annotation?; 
+		//
+		/// *
+		//defineunit_clause :
+		//	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+		//	;
+		// * /
+		//
+		//
+		/// *
+		// * 2.2.3 Extends
+		// * /
+		//
+		//// Note that this is a minor modification of the standard by
+		//// allowing the comment.
+		public ParserRule getRule() { return rule; }
+
+		//"extends" baseClass=name_path modification=class_modification? annotation=
+		//annotation?
+		public Group getGroup() { return cGroup; }
+
+		//"extends"
+		public Keyword getExtendsKeyword_0() { return cExtendsKeyword_0; }
+
+		//baseClass=name_path
+		public Assignment getBaseClassAssignment_1() { return cBaseClassAssignment_1; }
+
+		//name_path
+		public RuleCall getBaseClassName_pathParserRuleCall_1_0() { return cBaseClassName_pathParserRuleCall_1_0; }
+
+		//modification=class_modification?
+		public Assignment getModificationAssignment_2() { return cModificationAssignment_2; }
+
+		//class_modification
+		public RuleCall getModificationClass_modificationParserRuleCall_2_0() { return cModificationClass_modificationParserRuleCall_2_0; }
+
+		//annotation=annotation?
+		public Assignment getAnnotationAssignment_3() { return cAnnotationAssignment_3; }
+
+		//annotation
+		public RuleCall getAnnotationAnnotationParserRuleCall_3_0() { return cAnnotationAnnotationParserRuleCall_3_0; }
+	}
+
+	public class Constraining_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "constraining_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
+		private final Keyword cExtendsKeyword_0_0_0 = (Keyword)cGroup_0_0.eContents().get(0);
+		private final Assignment cNameAssignment_0_0_1 = (Assignment)cGroup_0_0.eContents().get(1);
+		private final RuleCall cNameName_pathParserRuleCall_0_0_1_0 = (RuleCall)cNameAssignment_0_0_1.eContents().get(0);
+		private final Assignment cModificationAssignment_0_0_2 = (Assignment)cGroup_0_0.eContents().get(2);
+		private final RuleCall cModificationClass_modificationParserRuleCall_0_0_2_0 = (RuleCall)cModificationAssignment_0_0_2.eContents().get(0);
+		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
+		private final Keyword cConstrainedbyKeyword_0_1_0 = (Keyword)cGroup_0_1.eContents().get(0);
+		private final Assignment cNameAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
+		private final RuleCall cNameName_pathParserRuleCall_0_1_1_0 = (RuleCall)cNameAssignment_0_1_1.eContents().get(0);
+		private final Assignment cModificationAssignment_0_1_2 = (Assignment)cGroup_0_1.eContents().get(2);
+		private final RuleCall cModificationClass_modificationParserRuleCall_0_1_2_0 = (RuleCall)cModificationAssignment_0_1_2.eContents().get(0);
+		private final Assignment cCommentAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cCommentCommentParserRuleCall_1_0 = (RuleCall)cCommentAssignment_1.eContents().get(0);
+		
+		//constraining_clause returns ConstrainingClause:
+		//  ("extends" name=name_path modification=class_modification?|"constrainedby" name=
+		//  name_path modification=class_modification?) comment=comment; 
+		//
+		//    
+		//	      
+		//	        
+		//	  
+		//	
+		//
+		/// *
+		// * 2.2.4 Component clause
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//("extends" name=name_path modification=class_modification?|"constrainedby" name=
+		//name_path modification=class_modification?) comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//"extends" name=name_path modification=class_modification?|"constrainedby" name=
+		//name_path modification=class_modification?
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//"extends" name=name_path modification=class_modification?
+		public Group getGroup_0_0() { return cGroup_0_0; }
+
+		//"extends"
+		public Keyword getExtendsKeyword_0_0_0() { return cExtendsKeyword_0_0_0; }
+
+		//name=name_path
+		public Assignment getNameAssignment_0_0_1() { return cNameAssignment_0_0_1; }
+
+		//name_path
+		public RuleCall getNameName_pathParserRuleCall_0_0_1_0() { return cNameName_pathParserRuleCall_0_0_1_0; }
+
+		//modification=class_modification?
+		public Assignment getModificationAssignment_0_0_2() { return cModificationAssignment_0_0_2; }
+
+		//class_modification
+		public RuleCall getModificationClass_modificationParserRuleCall_0_0_2_0() { return cModificationClass_modificationParserRuleCall_0_0_2_0; }
+
+		//"constrainedby" name=name_path modification=class_modification?
+		public Group getGroup_0_1() { return cGroup_0_1; }
+
+		//"constrainedby"
+		public Keyword getConstrainedbyKeyword_0_1_0() { return cConstrainedbyKeyword_0_1_0; }
+
+		//name=name_path
+		public Assignment getNameAssignment_0_1_1() { return cNameAssignment_0_1_1; }
+
+		//name_path
+		public RuleCall getNameName_pathParserRuleCall_0_1_1_0() { return cNameName_pathParserRuleCall_0_1_1_0; }
+
+		//modification=class_modification?
+		public Assignment getModificationAssignment_0_1_2() { return cModificationAssignment_0_1_2; }
+
+		//class_modification
+		public RuleCall getModificationClass_modificationParserRuleCall_0_1_2_0() { return cModificationClass_modificationParserRuleCall_0_1_2_0; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_1() { return cCommentAssignment_1; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_1_0() { return cCommentCommentParserRuleCall_1_0; }
+	}
+
+	public class Component_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "component_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cTypePrefixAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cTypePrefixType_prefixParserRuleCall_0_0 = (RuleCall)cTypePrefixAssignment_0.eContents().get(0);
+		private final Assignment cTypeSpecifierAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cTypeSpecifierType_specifierParserRuleCall_1_0 = (RuleCall)cTypeSpecifierAssignment_1.eContents().get(0);
+		private final Assignment cDeclarationsAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cDeclarationsComponent_declarationParserRuleCall_2_0 = (RuleCall)cDeclarationsAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final RuleCall cCOMMATerminalRuleCall_3_0 = (RuleCall)cGroup_3.eContents().get(0);
+		private final Assignment cDeclarationsAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cDeclarationsComponent_declarationParserRuleCall_3_1_0 = (RuleCall)cDeclarationsAssignment_3_1.eContents().get(0);
+		
+		//component_clause returns ComponentClause:
+		//  typePrefix=type_prefix typeSpecifier=type_specifier declarations+=
+		//  component_declaration (COMMA declarations+=component_declaration)*; 
+		//
+		/// *
+		// * 2.2.4 Component clause
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//typePrefix=type_prefix typeSpecifier=type_specifier declarations+=
+		//component_declaration (COMMA declarations+=component_declaration)*
+		public Group getGroup() { return cGroup; }
+
+		//typePrefix=type_prefix
+		public Assignment getTypePrefixAssignment_0() { return cTypePrefixAssignment_0; }
+
+		//type_prefix
+		public RuleCall getTypePrefixType_prefixParserRuleCall_0_0() { return cTypePrefixType_prefixParserRuleCall_0_0; }
+
+		//typeSpecifier=type_specifier
+		public Assignment getTypeSpecifierAssignment_1() { return cTypeSpecifierAssignment_1; }
+
+		//type_specifier
+		public RuleCall getTypeSpecifierType_specifierParserRuleCall_1_0() { return cTypeSpecifierType_specifierParserRuleCall_1_0; }
+
+		//declarations+=component_declaration
+		public Assignment getDeclarationsAssignment_2() { return cDeclarationsAssignment_2; }
+
+		//component_declaration
+		public RuleCall getDeclarationsComponent_declarationParserRuleCall_2_0() { return cDeclarationsComponent_declarationParserRuleCall_2_0; }
+
+		//(COMMA declarations+=component_declaration)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_3_0() { return cCOMMATerminalRuleCall_3_0; }
+
+		//declarations+=component_declaration
+		public Assignment getDeclarationsAssignment_3_1() { return cDeclarationsAssignment_3_1; }
+
+		//component_declaration
+		public RuleCall getDeclarationsComponent_declarationParserRuleCall_3_1_0() { return cDeclarationsComponent_declarationParserRuleCall_3_1_0; }
+	}
+
+	public class Type_prefixElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "type_prefix");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Keyword cFlowKeyword_0_0 = (Keyword)cAlternatives_0.eContents().get(0);
+		private final Keyword cStreamKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Keyword cDiscreteKeyword_1_0 = (Keyword)cAlternatives_1.eContents().get(0);
+		private final Keyword cParameterKeyword_1_1 = (Keyword)cAlternatives_1.eContents().get(1);
+		private final Keyword cConstantKeyword_1_2 = (Keyword)cAlternatives_1.eContents().get(2);
+		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
+		private final Keyword cInputKeyword_2_0 = (Keyword)cAlternatives_2.eContents().get(0);
+		private final Keyword cOutputKeyword_2_1 = (Keyword)cAlternatives_2.eContents().get(1);
+		
+		//type_prefix returns ecore::EString:
+		//  ("flow"|"stream")? ("discrete"|"parameter"|"constant")? ("input"|"output")?;
+		public ParserRule getRule() { return rule; }
+
+		//("flow"|"stream")? ("discrete"|"parameter"|"constant")? ("input"|"output")?
+		public Group getGroup() { return cGroup; }
+
+		//("flow"|"stream")?
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//"flow"
+		public Keyword getFlowKeyword_0_0() { return cFlowKeyword_0_0; }
+
+		//"stream"
+		public Keyword getStreamKeyword_0_1() { return cStreamKeyword_0_1; }
+
+		//("discrete"|"parameter"|"constant")?
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//"discrete"
+		public Keyword getDiscreteKeyword_1_0() { return cDiscreteKeyword_1_0; }
+
+		//"parameter"
+		public Keyword getParameterKeyword_1_1() { return cParameterKeyword_1_1; }
+
+		//"constant"
+		public Keyword getConstantKeyword_1_2() { return cConstantKeyword_1_2; }
+
+		//("input"|"output")?
+		public Alternatives getAlternatives_2() { return cAlternatives_2; }
+
+		//"input"
+		public Keyword getInputKeyword_2_0() { return cInputKeyword_2_0; }
+
+		//"output"
+		public Keyword getOutputKeyword_2_1() { return cOutputKeyword_2_1; }
+	}
+
+	public class Type_specifierElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "type_specifier");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cNameName_pathParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
+		private final Assignment cSubscriptsAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cSubscriptsArray_subscriptsParserRuleCall_1_0 = (RuleCall)cSubscriptsAssignment_1.eContents().get(0);
+		
+		//type_specifier returns TypeSpecifier:
+		//  name=name_path subscripts=array_subscripts?; 
+		//
+		//    
+		//	
+		//	// TODO MML expr?
+		//	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+		public ParserRule getRule() { return rule; }
+
+		//name=name_path subscripts=array_subscripts? 
+		//	
+		//	// TODO MML expr?
+		//	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+		public Group getGroup() { return cGroup; }
+
+		//name=name_path 
+		//	
+		//	// TODO MML expr?
+		//	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
+
+		//name_path 
+		//	// TODO MML expr?
+		//	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+		public RuleCall getNameName_pathParserRuleCall_0_0() { return cNameName_pathParserRuleCall_0_0; }
+
+		//subscripts=array_subscripts?
+		public Assignment getSubscriptsAssignment_1() { return cSubscriptsAssignment_1; }
+
+		//array_subscripts
+		public RuleCall getSubscriptsArray_subscriptsParserRuleCall_1_0() { return cSubscriptsArray_subscriptsParserRuleCall_1_0; }
+	}
+
+	public class Component_declarationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "component_declaration");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Assignment cSubscriptsAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cSubscriptsArray_subscriptsParserRuleCall_1_0 = (RuleCall)cSubscriptsAssignment_1.eContents().get(0);
+		private final Assignment cModificationAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cModificationModificationParserRuleCall_2_0 = (RuleCall)cModificationAssignment_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cIfKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cConditionAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_3_1_0 = (RuleCall)cConditionAssignment_3_1.eContents().get(0);
+		private final Assignment cCommentAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cCommentCommentParserRuleCall_4_0 = (RuleCall)cCommentAssignment_4.eContents().get(0);
+		
+		//component_declaration returns ComponentDeclaration:
+		//  IDENT subscripts=array_subscripts? modification=modification? ("if" condition=
+		//  expression)? comment=comment; 
+		//
+		//    
+		//	          
+		//	
+		//
+		/// *
+		// * 2.2.5 Modification
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//IDENT subscripts=array_subscripts? modification=modification? ("if" condition=
+		//expression)? comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//subscripts=array_subscripts?
+		public Assignment getSubscriptsAssignment_1() { return cSubscriptsAssignment_1; }
+
+		//array_subscripts
+		public RuleCall getSubscriptsArray_subscriptsParserRuleCall_1_0() { return cSubscriptsArray_subscriptsParserRuleCall_1_0; }
+
+		//modification=modification?
+		public Assignment getModificationAssignment_2() { return cModificationAssignment_2; }
+
+		//modification
+		public RuleCall getModificationModificationParserRuleCall_2_0() { return cModificationModificationParserRuleCall_2_0; }
+
+		//("if" condition=expression)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"if"
+		public Keyword getIfKeyword_3_0() { return cIfKeyword_3_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_3_1() { return cConditionAssignment_3_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_3_1_0() { return cConditionExpressionParserRuleCall_3_1_0; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_4() { return cCommentAssignment_4; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_4_0() { return cCommentCommentParserRuleCall_4_0; }
+	}
+
+	public class ModificationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "modification");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cClass_modificationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cSimpleModificationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//modification returns Modification:
+		//  class_modification|SimpleModification; 
+		//
+		/// *
+		// * 2.2.5 Modification
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//class_modification|SimpleModification 
+		//
+		/// *
+		// * 2.2.5 Modification
+		// * /
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//class_modification
+		public RuleCall getClass_modificationParserRuleCall_0() { return cClass_modificationParserRuleCall_0; }
+
+		//SimpleModification
+		public RuleCall getSimpleModificationParserRuleCall_1() { return cSimpleModificationParserRuleCall_1; }
+	}
+
+	public class SimpleModificationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SimpleModification");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_0_0 = (RuleCall)cGroup_0.eContents().get(0);
+		private final Assignment cExpressionAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
+		private final RuleCall cExpressionExpressionParserRuleCall_0_1_0 = (RuleCall)cExpressionAssignment_0_1.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final RuleCall cASSIGNTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final Assignment cExpressionAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cExpressionExpressionParserRuleCall_1_1_0 = (RuleCall)cExpressionAssignment_1_1.eContents().get(0);
+		
+		//SimpleModification:
+		//  EQUALS expression=expression|ASSIGN expression=expression;
+		public ParserRule getRule() { return rule; }
+
+		//EQUALS expression=expression|ASSIGN expression=expression
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//EQUALS expression=expression
+		public Group getGroup_0() { return cGroup_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_0_0() { return cEQUALSTerminalRuleCall_0_0; }
+
+		//expression=expression
+		public Assignment getExpressionAssignment_0_1() { return cExpressionAssignment_0_1; }
+
+		//expression
+		public RuleCall getExpressionExpressionParserRuleCall_0_1_0() { return cExpressionExpressionParserRuleCall_0_1_0; }
+
+		//ASSIGN expression=expression
+		public Group getGroup_1() { return cGroup_1; }
+
+		//ASSIGN
+		public RuleCall getASSIGNTerminalRuleCall_1_0() { return cASSIGNTerminalRuleCall_1_0; }
+
+		//expression=expression
+		public Assignment getExpressionAssignment_1_1() { return cExpressionAssignment_1_1; }
+
+		//expression
+		public RuleCall getExpressionExpressionParserRuleCall_1_1_0() { return cExpressionExpressionParserRuleCall_1_1_0; }
+	}
+
+	public class Class_modificationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "class_modification");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cLPARTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Assignment cArgumentsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
+		private final RuleCall cArgumentsArgumentParserRuleCall_1_0_0 = (RuleCall)cArgumentsAssignment_1_0.eContents().get(0);
+		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
+		private final RuleCall cCOMMATerminalRuleCall_1_1_0 = (RuleCall)cGroup_1_1.eContents().get(0);
+		private final Assignment cArgumentsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
+		private final RuleCall cArgumentsArgumentParserRuleCall_1_1_1_0 = (RuleCall)cArgumentsAssignment_1_1_1.eContents().get(0);
+		private final RuleCall cRPARTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final RuleCall cEQUALSTerminalRuleCall_3_0 = (RuleCall)cGroup_3.eContents().get(0);
+		private final Assignment cExpressionAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cExpressionExpressionParserRuleCall_3_1_0 = (RuleCall)cExpressionAssignment_3_1.eContents().get(0);
+		
+		//class_modification returns ClassModification:
+		//  LPAR (arguments+=argument (COMMA arguments+=argument)*)? RPAR (EQUALS expression=
+		//  expression)?;
+		public ParserRule getRule() { return rule; }
+
+		//LPAR (arguments+=argument (COMMA arguments+=argument)*)? RPAR (EQUALS expression=
+		//expression)?
+		public Group getGroup() { return cGroup; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_0() { return cLPARTerminalRuleCall_0; }
+
+		//(arguments+=argument (COMMA arguments+=argument)*)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//arguments+=argument
+		public Assignment getArgumentsAssignment_1_0() { return cArgumentsAssignment_1_0; }
+
+		//argument
+		public RuleCall getArgumentsArgumentParserRuleCall_1_0_0() { return cArgumentsArgumentParserRuleCall_1_0_0; }
+
+		//(COMMA arguments+=argument)*
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_1_0() { return cCOMMATerminalRuleCall_1_1_0; }
+
+		//arguments+=argument
+		public Assignment getArgumentsAssignment_1_1_1() { return cArgumentsAssignment_1_1_1; }
+
+		//argument
+		public RuleCall getArgumentsArgumentParserRuleCall_1_1_1_0() { return cArgumentsArgumentParserRuleCall_1_1_1_0; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_2() { return cRPARTerminalRuleCall_2; }
+
+		//(EQUALS expression=expression)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_3_0() { return cEQUALSTerminalRuleCall_3_0; }
+
+		//expression=expression
+		public Assignment getExpressionAssignment_3_1() { return cExpressionAssignment_3_1; }
+
+		//expression
+		public RuleCall getExpressionExpressionParserRuleCall_3_1_0() { return cExpressionExpressionParserRuleCall_3_1_0; }
+	}
+
+	public class ArgumentElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "argument");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final Keyword cEachKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final Keyword cFinalKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
+		private final Alternatives cAlternatives_0_2 = (Alternatives)cGroup_0.eContents().get(2);
+		private final RuleCall cElementModificationParserRuleCall_0_2_0 = (RuleCall)cAlternatives_0_2.eContents().get(0);
+		private final RuleCall cElementReplaceableClauseParserRuleCall_0_2_1 = (RuleCall)cAlternatives_0_2.eContents().get(1);
+		private final RuleCall cElementRedeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//argument:
+		//  "each"? "final"? (ElementModification|ElementReplaceableClause)|
+		//  ElementRedeclaration;
+		public ParserRule getRule() { return rule; }
+
+		//"each"? "final"? (ElementModification|ElementReplaceableClause)|
+		//ElementRedeclaration
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//"each"? "final"? (ElementModification|ElementReplaceableClause)
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"each"?
+		public Keyword getEachKeyword_0_0() { return cEachKeyword_0_0; }
+
+		//"final"?
+		public Keyword getFinalKeyword_0_1() { return cFinalKeyword_0_1; }
+
+		//ElementModification|ElementReplaceableClause
+		public Alternatives getAlternatives_0_2() { return cAlternatives_0_2; }
+
+		//ElementModification
+		public RuleCall getElementModificationParserRuleCall_0_2_0() { return cElementModificationParserRuleCall_0_2_0; }
+
+		//ElementReplaceableClause
+		public RuleCall getElementReplaceableClauseParserRuleCall_0_2_1() { return cElementReplaceableClauseParserRuleCall_0_2_1; }
+
+		//ElementRedeclaration
+		public RuleCall getElementRedeclarationParserRuleCall_1() { return cElementRedeclarationParserRuleCall_1; }
+	}
+
+	public class ElementModificationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ElementModification");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cComponetRefAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cComponetRefComponent_referenceParserRuleCall_0_0 = (RuleCall)cComponetRefAssignment_0.eContents().get(0);
+		private final Assignment cModificationAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cModificationModificationParserRuleCall_1_0 = (RuleCall)cModificationAssignment_1.eContents().get(0);
+		private final Assignment cCommentAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cCommentString_commentParserRuleCall_2_0 = (RuleCall)cCommentAssignment_2.eContents().get(0);
+		
+		//ElementModification:
+		//  componetRef=component_reference modification=modification? comment=string_comment?
+		//;
+		public ParserRule getRule() { return rule; }
+
+		//componetRef=component_reference modification=modification? comment=string_comment?
+		public Group getGroup() { return cGroup; }
+
+		//componetRef=component_reference
+		public Assignment getComponetRefAssignment_0() { return cComponetRefAssignment_0; }
+
+		//component_reference
+		public RuleCall getComponetRefComponent_referenceParserRuleCall_0_0() { return cComponetRefComponent_referenceParserRuleCall_0_0; }
+
+		//modification=modification?
+		public Assignment getModificationAssignment_1() { return cModificationAssignment_1; }
+
+		//modification
+		public RuleCall getModificationModificationParserRuleCall_1_0() { return cModificationModificationParserRuleCall_1_0; }
+
+		//comment=string_comment?
+		public Assignment getCommentAssignment_2() { return cCommentAssignment_2; }
+
+		//string_comment
+		public RuleCall getCommentString_commentParserRuleCall_2_0() { return cCommentString_commentParserRuleCall_2_0; }
+	}
+
+	public class ElementRedeclarationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ElementRedeclaration");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cRedeclareKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Keyword cEachKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Keyword cFinalKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
+		private final Alternatives cAlternatives_3_0 = (Alternatives)cAlternatives_3.eContents().get(0);
+		private final RuleCall cClassDefinitionParserRuleCall_3_0_0 = (RuleCall)cAlternatives_3_0.eContents().get(0);
+		private final RuleCall cElementComponentClauseParserRuleCall_3_0_1 = (RuleCall)cAlternatives_3_0.eContents().get(1);
+		private final RuleCall cElementReplaceableClauseParserRuleCall_3_1 = (RuleCall)cAlternatives_3.eContents().get(1);
+		
+		//ElementRedeclaration:
+		//  "redeclare" "each"? "final"? ((ClassDefinition|ElementComponentClause)|
+		//  ElementReplaceableClause);
+		public ParserRule getRule() { return rule; }
+
+		//"redeclare" "each"? "final"? ((ClassDefinition|ElementComponentClause)|
+		//ElementReplaceableClause)
+		public Group getGroup() { return cGroup; }
+
+		//"redeclare"
+		public Keyword getRedeclareKeyword_0() { return cRedeclareKeyword_0; }
+
+		//"each"?
+		public Keyword getEachKeyword_1() { return cEachKeyword_1; }
+
+		//"final"?
+		public Keyword getFinalKeyword_2() { return cFinalKeyword_2; }
+
+		//(ClassDefinition|ElementComponentClause)|ElementReplaceableClause
+		public Alternatives getAlternatives_3() { return cAlternatives_3; }
+
+		//ClassDefinition|ElementComponentClause
+		public Alternatives getAlternatives_3_0() { return cAlternatives_3_0; }
+
+		//ClassDefinition
+		public RuleCall getClassDefinitionParserRuleCall_3_0_0() { return cClassDefinitionParserRuleCall_3_0_0; }
+
+		//ElementComponentClause
+		public RuleCall getElementComponentClauseParserRuleCall_3_0_1() { return cElementComponentClauseParserRuleCall_3_0_1; }
+
+		//ElementReplaceableClause
+		public RuleCall getElementReplaceableClauseParserRuleCall_3_1() { return cElementReplaceableClauseParserRuleCall_3_1; }
+	}
+
+	public class ElementReplaceableClauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ElementReplaceableClause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cReplaceableKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cElementAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final Alternatives cElementAlternatives_1_0 = (Alternatives)cElementAssignment_1.eContents().get(0);
+		private final RuleCall cElementClassDefinitionParserRuleCall_1_0_0 = (RuleCall)cElementAlternatives_1_0.eContents().get(0);
+		private final RuleCall cElementElementComponentClauseParserRuleCall_1_0_1 = (RuleCall)cElementAlternatives_1_0.eContents().get(1);
+		private final Assignment cConstraintAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cConstraintConstraining_clauseParserRuleCall_2_0 = (RuleCall)cConstraintAssignment_2.eContents().get(0);
+		
+		//ElementReplaceableClause:
+		//  "replaceable" element=( ClassDefinition | ElementComponentClause ) constraint=
+		//  constraining_clause?;
+		public ParserRule getRule() { return rule; }
+
+		//"replaceable" element=( ClassDefinition | ElementComponentClause ) constraint=
+		//constraining_clause?
+		public Group getGroup() { return cGroup; }
+
+		//"replaceable"
+		public Keyword getReplaceableKeyword_0() { return cReplaceableKeyword_0; }
+
+		//element=( ClassDefinition | ElementComponentClause )
+		public Assignment getElementAssignment_1() { return cElementAssignment_1; }
+
+		//ClassDefinition|ElementComponentClause
+		public Alternatives getElementAlternatives_1_0() { return cElementAlternatives_1_0; }
+
+		//ClassDefinition
+		public RuleCall getElementClassDefinitionParserRuleCall_1_0_0() { return cElementClassDefinitionParserRuleCall_1_0_0; }
+
+		//ElementComponentClause
+		public RuleCall getElementElementComponentClauseParserRuleCall_1_0_1() { return cElementElementComponentClauseParserRuleCall_1_0_1; }
+
+		//constraint=constraining_clause?
+		public Assignment getConstraintAssignment_2() { return cConstraintAssignment_2; }
+
+		//constraining_clause
+		public RuleCall getConstraintConstraining_clauseParserRuleCall_2_0() { return cConstraintConstraining_clauseParserRuleCall_2_0; }
+	}
+
+	public class ElementComponentClauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ElementComponentClause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cTypePrefixAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cTypePrefixType_prefixParserRuleCall_0_0 = (RuleCall)cTypePrefixAssignment_0.eContents().get(0);
+		private final Assignment cTypeSpecifierAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cTypeSpecifierType_specifierParserRuleCall_1_0 = (RuleCall)cTypeSpecifierAssignment_1.eContents().get(0);
+		private final RuleCall cIDENTTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final Assignment cSubscriptsAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cSubscriptsArray_subscriptsParserRuleCall_3_0 = (RuleCall)cSubscriptsAssignment_3.eContents().get(0);
+		private final Assignment cModificationAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cModificationModificationParserRuleCall_4_0 = (RuleCall)cModificationAssignment_4.eContents().get(0);
+		private final Assignment cCommentAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final RuleCall cCommentCommentParserRuleCall_5_0 = (RuleCall)cCommentAssignment_5.eContents().get(0);
+		
+		//ElementComponentClause:
+		//  typePrefix=type_prefix typeSpecifier=type_specifier IDENT subscripts=
+		//  array_subscripts? modification=modification? comment=comment; 
+		//	
+		//  
+		//	       
+		//	  
+		//	
+		//
+		//
+		/// *
+		// * 2.2.6 Equations
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//typePrefix=type_prefix typeSpecifier=type_specifier IDENT subscripts=
+		//array_subscripts? modification=modification? comment=comment
+		public Group getGroup() { return cGroup; }
+
+		//typePrefix=type_prefix
+		public Assignment getTypePrefixAssignment_0() { return cTypePrefixAssignment_0; }
+
+		//type_prefix
+		public RuleCall getTypePrefixType_prefixParserRuleCall_0_0() { return cTypePrefixType_prefixParserRuleCall_0_0; }
+
+		//typeSpecifier=type_specifier
+		public Assignment getTypeSpecifierAssignment_1() { return cTypeSpecifierAssignment_1; }
+
+		//type_specifier
+		public RuleCall getTypeSpecifierType_specifierParserRuleCall_1_0() { return cTypeSpecifierType_specifierParserRuleCall_1_0; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_2() { return cIDENTTerminalRuleCall_2; }
+
+		//subscripts=array_subscripts?
+		public Assignment getSubscriptsAssignment_3() { return cSubscriptsAssignment_3; }
+
+		//array_subscripts
+		public RuleCall getSubscriptsArray_subscriptsParserRuleCall_3_0() { return cSubscriptsArray_subscriptsParserRuleCall_3_0; }
+
+		//modification=modification?
+		public Assignment getModificationAssignment_4() { return cModificationAssignment_4; }
+
+		//modification
+		public RuleCall getModificationModificationParserRuleCall_4_0() { return cModificationModificationParserRuleCall_4_0; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_5() { return cCommentAssignment_5; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_5_0() { return cCommentCommentParserRuleCall_5_0; }
+	}
+
+	public class Equation_rule_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "equation_rule_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cEquationKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final Assignment cEquationRulesAssignment_1_0_0 = (Assignment)cGroup_1_0.eContents().get(0);
+		private final RuleCall cEquationRulesEquation_ruleParserRuleCall_1_0_0_0 = (RuleCall)cEquationRulesAssignment_1_0_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_1_0_1 = (RuleCall)cGroup_1_0.eContents().get(1);
+		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
+		private final Assignment cAnnotationsAssignment_1_1_0 = (Assignment)cGroup_1_1.eContents().get(0);
+		private final RuleCall cAnnotationsAnnotationParserRuleCall_1_1_0_0 = (RuleCall)cAnnotationsAssignment_1_1_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_1_1_1 = (RuleCall)cGroup_1_1.eContents().get(1);
+		
+		//equation_rule_clause returns EquationClause:
+		//  "equation" (equationRules+=equation_rule SEMICOLON|annotations+=annotation
+		//  SEMICOLON)+; 
+		//
+		//
+		/// *
+		// * 2.2.6 Equations
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//"equation" (equationRules+=equation_rule SEMICOLON|annotations+=annotation
+		//SEMICOLON)+
+		public Group getGroup() { return cGroup; }
+
+		//"equation"
+		public Keyword getEquationKeyword_0() { return cEquationKeyword_0; }
+
+		//(equationRules+=equation_rule SEMICOLON|annotations+=annotation SEMICOLON)+
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//equationRules+=equation_rule SEMICOLON
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//equationRules+=equation_rule
+		public Assignment getEquationRulesAssignment_1_0_0() { return cEquationRulesAssignment_1_0_0; }
+
+		//equation_rule
+		public RuleCall getEquationRulesEquation_ruleParserRuleCall_1_0_0_0() { return cEquationRulesEquation_ruleParserRuleCall_1_0_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_1_0_1() { return cSEMICOLONTerminalRuleCall_1_0_1; }
+
+		//annotations+=annotation SEMICOLON
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//annotations+=annotation
+		public Assignment getAnnotationsAssignment_1_1_0() { return cAnnotationsAssignment_1_1_0; }
+
+		//annotation
+		public RuleCall getAnnotationsAnnotationParserRuleCall_1_1_0_0() { return cAnnotationsAnnotationParserRuleCall_1_1_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_1_1_1() { return cSEMICOLONTerminalRuleCall_1_1_1; }
+	}
+
+	public class Algorithm_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "algorithm_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cAlgorithmKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final Assignment cAlgorithmRulesAssignment_1_0_0 = (Assignment)cGroup_1_0.eContents().get(0);
+		private final RuleCall cAlgorithmRulesAlgorithmParserRuleCall_1_0_0_0 = (RuleCall)cAlgorithmRulesAssignment_1_0_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_1_0_1 = (RuleCall)cGroup_1_0.eContents().get(1);
+		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
+		private final Assignment cAnnotationsAssignment_1_1_0 = (Assignment)cGroup_1_1.eContents().get(0);
+		private final RuleCall cAnnotationsAnnotationParserRuleCall_1_1_0_0 = (RuleCall)cAnnotationsAssignment_1_1_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_1_1_1 = (RuleCall)cGroup_1_1.eContents().get(1);
+		
+		//algorithm_clause:
+		//  "algorithm" (algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)
+		//  +;
+		public ParserRule getRule() { return rule; }
+
+		//"algorithm" (algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)
+		//+
+		public Group getGroup() { return cGroup; }
+
+		//"algorithm"
+		public Keyword getAlgorithmKeyword_0() { return cAlgorithmKeyword_0; }
+
+		//(algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)+
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//algorithmRules+=algorithm SEMICOLON
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//algorithmRules+=algorithm
+		public Assignment getAlgorithmRulesAssignment_1_0_0() { return cAlgorithmRulesAssignment_1_0_0; }
+
+		//algorithm
+		public RuleCall getAlgorithmRulesAlgorithmParserRuleCall_1_0_0_0() { return cAlgorithmRulesAlgorithmParserRuleCall_1_0_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_1_0_1() { return cSEMICOLONTerminalRuleCall_1_0_1; }
+
+		//annotations+=annotation SEMICOLON
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//annotations+=annotation
+		public Assignment getAnnotationsAssignment_1_1_0() { return cAnnotationsAssignment_1_1_0; }
+
+		//annotation
+		public RuleCall getAnnotationsAnnotationParserRuleCall_1_1_0_0() { return cAnnotationsAnnotationParserRuleCall_1_1_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_1_1_1() { return cSEMICOLONTerminalRuleCall_1_1_1; }
+	}
+
+	public class Initial_equation_rule_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "initial_equation_rule_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cInitialKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cEquation_rule_clauseParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//initial_equation_rule_clause:
+		//  "initial" equation_rule_clause;
+		public ParserRule getRule() { return rule; }
+
+		//"initial" equation_rule_clause
+		public Group getGroup() { return cGroup; }
+
+		//"initial"
+		public Keyword getInitialKeyword_0() { return cInitialKeyword_0; }
+
+		//equation_rule_clause
+		public RuleCall getEquation_rule_clauseParserRuleCall_1() { return cEquation_rule_clauseParserRuleCall_1; }
+	}
+
+	public class Initial_algorithm_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "initial_algorithm_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cInitialKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cAlgorithm_clauseParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//initial_algorithm_clause:
+		//  "initial" algorithm_clause;
+		public ParserRule getRule() { return rule; }
+
+		//"initial" algorithm_clause
+		public Group getGroup() { return cGroup; }
+
+		//"initial"
+		public Keyword getInitialKeyword_0() { return cInitialKeyword_0; }
+
+		//algorithm_clause
+		public RuleCall getAlgorithm_clauseParserRuleCall_1() { return cAlgorithm_clauseParserRuleCall_1; }
+	}
+
+	public class Equation_ruleElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "equation_rule");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final RuleCall cEquality_equation_ruleParserRuleCall_0_0 = (RuleCall)cAlternatives_0.eContents().get(0);
+		private final RuleCall cConditional_equation_rule_eParserRuleCall_0_1 = (RuleCall)cAlternatives_0.eContents().get(1);
+		private final RuleCall cFor_clause_eParserRuleCall_0_2 = (RuleCall)cAlternatives_0.eContents().get(2);
+		private final RuleCall cConnect_clauseParserRuleCall_0_3 = (RuleCall)cAlternatives_0.eContents().get(3);
+		private final RuleCall cWhen_clause_eParserRuleCall_0_4 = (RuleCall)cAlternatives_0.eContents().get(4);
+		private final Assignment cCommentAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cCommentCommentParserRuleCall_1_0 = (RuleCall)cCommentAssignment_1.eContents().get(0);
+		
+		//equation_rule:
+		//  (equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+		//  when_clause_e) comment=comment; 
+		//
+		//  
+		//	  	 
+		//	  
+		//	  
+		//	  
+		//	     
+		//	//| FAILURE LPAR equation_rule RPAR
+		//	 //| EQUALITY LPAR equation_rule RPAR
+		public ParserRule getRule() { return rule; }
+
+		//(equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+		//when_clause_e) comment=comment 
+		//	  	 
+		//	  
+		//	  
+		//	  
+		//	     
+		//	//| FAILURE LPAR equation_rule RPAR
+		//	 //| EQUALITY LPAR equation_rule RPAR
+		public Group getGroup() { return cGroup; }
+
+		//equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+		//when_clause_e 
+		//	  	 
+		//	  
+		//	  
+		//	  
+		//	     
+		//	//| FAILURE LPAR equation_rule RPAR
+		//	 //| EQUALITY LPAR equation_rule RPAR
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//equality_equation_rule
+		public RuleCall getEquality_equation_ruleParserRuleCall_0_0() { return cEquality_equation_ruleParserRuleCall_0_0; }
+
+		//conditional_equation_rule_e
+		public RuleCall getConditional_equation_rule_eParserRuleCall_0_1() { return cConditional_equation_rule_eParserRuleCall_0_1; }
+
+		//for_clause_e
+		public RuleCall getFor_clause_eParserRuleCall_0_2() { return cFor_clause_eParserRuleCall_0_2; }
+
+		//connect_clause
+		public RuleCall getConnect_clauseParserRuleCall_0_3() { return cConnect_clauseParserRuleCall_0_3; }
+
+		//when_clause_e      
+		//	//| FAILURE LPAR equation_rule RPAR
+		//	 //| EQUALITY LPAR equation_rule RPAR
+		public RuleCall getWhen_clause_eParserRuleCall_0_4() { return cWhen_clause_eParserRuleCall_0_4; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_1() { return cCommentAssignment_1; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_1_0() { return cCommentCommentParserRuleCall_1_0; }
+	}
+
+	public class AlgorithmElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "algorithm");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final RuleCall cAssign_clause_aParserRuleCall_0_0 = (RuleCall)cAlternatives_0.eContents().get(0);
+		private final RuleCall cConditional_equation_rule_aParserRuleCall_0_1 = (RuleCall)cAlternatives_0.eContents().get(1);
+		private final RuleCall cFor_clause_aParserRuleCall_0_2 = (RuleCall)cAlternatives_0.eContents().get(2);
+		private final RuleCall cWhile_clauseParserRuleCall_0_3 = (RuleCall)cAlternatives_0.eContents().get(3);
+		private final RuleCall cWhen_clause_aParserRuleCall_0_4 = (RuleCall)cAlternatives_0.eContents().get(4);
+		private final Keyword cBreakKeyword_0_5 = (Keyword)cAlternatives_0.eContents().get(5);
+		private final Keyword cReturnKeyword_0_6 = (Keyword)cAlternatives_0.eContents().get(6);
+		private final Assignment cCommentAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cCommentCommentParserRuleCall_1_0 = (RuleCall)cCommentAssignment_1.eContents().get(0);
+		
+		//algorithm:
+		//  (assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+		//  when_clause_a|"break"|"return") comment=comment; 
+		//
+		//  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	//| FAILURE LPAR algorithm RPAR
+		//	 //| EQUALITY LPAR algorithm RPAR
+		public ParserRule getRule() { return rule; }
+
+		//(assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+		//when_clause_a|"break"|"return") comment=comment 
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	//| FAILURE LPAR algorithm RPAR
+		//	 //| EQUALITY LPAR algorithm RPAR
+		public Group getGroup() { return cGroup; }
+
+		//assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+		//when_clause_a|"break"|"return" 
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	  
+		//	//| FAILURE LPAR algorithm RPAR
+		//	 //| EQUALITY LPAR algorithm RPAR
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//assign_clause_a
+		public RuleCall getAssign_clause_aParserRuleCall_0_0() { return cAssign_clause_aParserRuleCall_0_0; }
+
+		//conditional_equation_rule_a
+		public RuleCall getConditional_equation_rule_aParserRuleCall_0_1() { return cConditional_equation_rule_aParserRuleCall_0_1; }
+
+		//for_clause_a
+		public RuleCall getFor_clause_aParserRuleCall_0_2() { return cFor_clause_aParserRuleCall_0_2; }
+
+		//while_clause
+		public RuleCall getWhile_clauseParserRuleCall_0_3() { return cWhile_clauseParserRuleCall_0_3; }
+
+		//when_clause_a
+		public RuleCall getWhen_clause_aParserRuleCall_0_4() { return cWhen_clause_aParserRuleCall_0_4; }
+
+		//"break"
+		public Keyword getBreakKeyword_0_5() { return cBreakKeyword_0_5; }
+
+		//"return"   
+		//	//| FAILURE LPAR algorithm RPAR
+		//	 //| EQUALITY LPAR algorithm RPAR
+		public Keyword getReturnKeyword_0_6() { return cReturnKeyword_0_6; }
+
+		//comment=comment
+		public Assignment getCommentAssignment_1() { return cCommentAssignment_1; }
+
+		//comment
+		public RuleCall getCommentCommentParserRuleCall_1_0() { return cCommentCommentParserRuleCall_1_0; }
+	}
+
+	public class Assign_clause_aElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "assign_clause_a");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cSimple_expressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final RuleCall cASSIGNTerminalRuleCall_1_0_0 = (RuleCall)cGroup_1_0.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1_0_1 = (RuleCall)cGroup_1_0.eContents().get(1);
+		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
+		private final RuleCall cEQUALSTerminalRuleCall_1_1_0 = (RuleCall)cGroup_1_1.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1_1_1 = (RuleCall)cGroup_1_1.eContents().get(1);
+		
+		//assign_clause_a returns ecore::EString:
+		//  simple_expression (ASSIGN expression|EQUALS expression)?;
+		public ParserRule getRule() { return rule; }
+
+		//simple_expression (ASSIGN expression|EQUALS expression)?
+		public Group getGroup() { return cGroup; }
+
+		//simple_expression
+		public RuleCall getSimple_expressionParserRuleCall_0() { return cSimple_expressionParserRuleCall_0; }
+
+		//(ASSIGN expression|EQUALS expression)?
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//ASSIGN expression
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//ASSIGN
+		public RuleCall getASSIGNTerminalRuleCall_1_0_0() { return cASSIGNTerminalRuleCall_1_0_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1_0_1() { return cExpressionParserRuleCall_1_0_1; }
+
+		//EQUALS expression
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_1_1_0() { return cEQUALSTerminalRuleCall_1_1_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1_1_1() { return cExpressionParserRuleCall_1_1_1; }
+	}
+
+	public class Equality_equation_ruleElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "equality_equation_rule");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cSimple_expressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cEQUALSTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//equality_equation_rule returns ecore::EString:
+		//  simple_expression (EQUALS expression)?;
+		public ParserRule getRule() { return rule; }
+
+		//simple_expression (EQUALS expression)?
+		public Group getGroup() { return cGroup; }
+
+		//simple_expression
+		public RuleCall getSimple_expressionParserRuleCall_0() { return cSimple_expressionParserRuleCall_0; }
+
+		//(EQUALS expression)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_1_0() { return cEQUALSTerminalRuleCall_1_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1_1() { return cExpressionParserRuleCall_1_1; }
+	}
+
+	public class Conditional_equation_rule_eElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "conditional_equation_rule_e");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenEquationClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenEquationClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenEquationClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Assignment cElseifClausesAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cElseifClausesEquation_rule_elseifParserRuleCall_4_0 = (RuleCall)cElseifClausesAssignment_4.eContents().get(0);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cElseKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Group cGroup_5_1 = (Group)cGroup_5.eContents().get(1);
+		private final Assignment cElseEquationClausesAssignment_5_1_0 = (Assignment)cGroup_5_1.eContents().get(0);
+		private final RuleCall cElseEquationClausesEquation_ruleParserRuleCall_5_1_0_0 = (RuleCall)cElseEquationClausesAssignment_5_1_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_5_1_1 = (RuleCall)cGroup_5_1.eContents().get(1);
+		private final Keyword cEndKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final Keyword cIfKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		
+		//conditional_equation_rule_e returns ConditionalEquationRule:
+		//  "if" expression "then" (thenEquationClauses+=equation_rule SEMICOLON)* elseifClauses
+		//  +=equation_rule_elseif* ("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+		//  "end" "if";
+		public ParserRule getRule() { return rule; }
+
+		//"if" expression "then" (thenEquationClauses+=equation_rule SEMICOLON)* elseifClauses
+		//+=equation_rule_elseif* ("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+		//"end" "if"
+		public Group getGroup() { return cGroup; }
+
+		//"if"
+		public Keyword getIfKeyword_0() { return cIfKeyword_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1() { return cExpressionParserRuleCall_1; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenEquationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenEquationClauses+=equation_rule
+		public Assignment getThenEquationClausesAssignment_3_0() { return cThenEquationClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenEquationClausesEquation_ruleParserRuleCall_3_0_0() { return cThenEquationClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//elseifClauses+=equation_rule_elseif*
+		public Assignment getElseifClausesAssignment_4() { return cElseifClausesAssignment_4; }
+
+		//equation_rule_elseif
+		public RuleCall getElseifClausesEquation_rule_elseifParserRuleCall_4_0() { return cElseifClausesEquation_rule_elseifParserRuleCall_4_0; }
+
+		//("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"else"
+		public Keyword getElseKeyword_5_0() { return cElseKeyword_5_0; }
+
+		//(elseEquationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_5_1() { return cGroup_5_1; }
+
+		//elseEquationClauses+=equation_rule
+		public Assignment getElseEquationClausesAssignment_5_1_0() { return cElseEquationClausesAssignment_5_1_0; }
+
+		//equation_rule
+		public RuleCall getElseEquationClausesEquation_ruleParserRuleCall_5_1_0_0() { return cElseEquationClausesEquation_ruleParserRuleCall_5_1_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_5_1_1() { return cSEMICOLONTerminalRuleCall_5_1_1; }
+
+		//"end"
+		public Keyword getEndKeyword_6() { return cEndKeyword_6; }
+
+		//"if"
+		public Keyword getIfKeyword_7() { return cIfKeyword_7; }
+	}
+
+	public class Conditional_equation_rule_aElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "conditional_equation_rule_a");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenAlgorithmClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenAlgorithmClausesAlgorithmParserRuleCall_3_0_0 = (RuleCall)cThenAlgorithmClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Assignment cElseifClausesAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cElseifClausesAlgorithm_elseifParserRuleCall_4_0 = (RuleCall)cElseifClausesAssignment_4.eContents().get(0);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cElseKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Group cGroup_5_1 = (Group)cGroup_5.eContents().get(1);
+		private final Assignment cElseAlgotithmClausesAssignment_5_1_0 = (Assignment)cGroup_5_1.eContents().get(0);
+		private final RuleCall cElseAlgotithmClausesAlgorithmParserRuleCall_5_1_0_0 = (RuleCall)cElseAlgotithmClausesAssignment_5_1_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_5_1_1 = (RuleCall)cGroup_5_1.eContents().get(1);
+		private final Keyword cEndKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		private final Keyword cIfKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		
+		//conditional_equation_rule_a returns ConditionAlgorithmRule:
+		//  "if" condition=expression "then" (thenAlgorithmClauses+=algorithm SEMICOLON)*
+		//  elseifClauses+=algorithm_elseif* ("else" (elseAlgotithmClauses+=algorithm SEMICOLON
+		//  )*)? "end" "if";
+		public ParserRule getRule() { return rule; }
+
+		//"if" condition=expression "then" (thenAlgorithmClauses+=algorithm SEMICOLON)*
+		//elseifClauses+=algorithm_elseif* ("else" (elseAlgotithmClauses+=algorithm SEMICOLON
+		//)*)? "end" "if"
+		public Group getGroup() { return cGroup; }
+
+		//"if"
+		public Keyword getIfKeyword_0() { return cIfKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenAlgorithmClauses+=algorithm SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenAlgorithmClauses+=algorithm
+		public Assignment getThenAlgorithmClausesAssignment_3_0() { return cThenAlgorithmClausesAssignment_3_0; }
+
+		//algorithm
+		public RuleCall getThenAlgorithmClausesAlgorithmParserRuleCall_3_0_0() { return cThenAlgorithmClausesAlgorithmParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//elseifClauses+=algorithm_elseif*
+		public Assignment getElseifClausesAssignment_4() { return cElseifClausesAssignment_4; }
+
+		//algorithm_elseif
+		public RuleCall getElseifClausesAlgorithm_elseifParserRuleCall_4_0() { return cElseifClausesAlgorithm_elseifParserRuleCall_4_0; }
+
+		//("else" (elseAlgotithmClauses+=algorithm SEMICOLON)*)?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"else"
+		public Keyword getElseKeyword_5_0() { return cElseKeyword_5_0; }
+
+		//(elseAlgotithmClauses+=algorithm SEMICOLON)*
+		public Group getGroup_5_1() { return cGroup_5_1; }
+
+		//elseAlgotithmClauses+=algorithm
+		public Assignment getElseAlgotithmClausesAssignment_5_1_0() { return cElseAlgotithmClausesAssignment_5_1_0; }
+
+		//algorithm
+		public RuleCall getElseAlgotithmClausesAlgorithmParserRuleCall_5_1_0_0() { return cElseAlgotithmClausesAlgorithmParserRuleCall_5_1_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_5_1_1() { return cSEMICOLONTerminalRuleCall_5_1_1; }
+
+		//"end"
+		public Keyword getEndKeyword_6() { return cEndKeyword_6; }
+
+		//"if"
+		public Keyword getIfKeyword_7() { return cIfKeyword_7; }
+	}
+
+	public class For_clause_eElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "for_clause_e");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cForKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cForIndicesAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cForIndicesFor_indicesParserRuleCall_1_0 = (RuleCall)cForIndicesAssignment_1.eContents().get(0);
+		private final Keyword cLoopKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cEquationClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cEquationClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cEquationClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Keyword cEndKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Keyword cForKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//for_clause_e returns ForEquationClause:
+		//  "for" forIndices=for_indices "loop" (equationClauses+=equation_rule SEMICOLON)* "end"
+		//  "for";
+		public ParserRule getRule() { return rule; }
+
+		//"for" forIndices=for_indices "loop" (equationClauses+=equation_rule SEMICOLON)* "end"
+		//"for"
+		public Group getGroup() { return cGroup; }
+
+		//"for"
+		public Keyword getForKeyword_0() { return cForKeyword_0; }
+
+		//forIndices=for_indices
+		public Assignment getForIndicesAssignment_1() { return cForIndicesAssignment_1; }
+
+		//for_indices
+		public RuleCall getForIndicesFor_indicesParserRuleCall_1_0() { return cForIndicesFor_indicesParserRuleCall_1_0; }
+
+		//"loop"
+		public Keyword getLoopKeyword_2() { return cLoopKeyword_2; }
+
+		//(equationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//equationClauses+=equation_rule
+		public Assignment getEquationClausesAssignment_3_0() { return cEquationClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getEquationClausesEquation_ruleParserRuleCall_3_0_0() { return cEquationClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//"end"
+		public Keyword getEndKeyword_4() { return cEndKeyword_4; }
+
+		//"for"
+		public Keyword getForKeyword_5() { return cForKeyword_5; }
+	}
+
+	public class For_clause_aElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "for_clause_a");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cForKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cForIndicesAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cForIndicesFor_indicesParserRuleCall_1_0 = (RuleCall)cForIndicesAssignment_1.eContents().get(0);
+		private final Keyword cLoopKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cAlgorithmClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cAlgorithmClausesAlgorithmParserRuleCall_3_0_0 = (RuleCall)cAlgorithmClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Keyword cEndKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Keyword cForKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//for_clause_a returns ForAlgorithmClause:
+		//  "for" forIndices=for_indices "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+		//  "for";
+		public ParserRule getRule() { return rule; }
+
+		//"for" forIndices=for_indices "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+		//"for"
+		public Group getGroup() { return cGroup; }
+
+		//"for"
+		public Keyword getForKeyword_0() { return cForKeyword_0; }
+
+		//forIndices=for_indices
+		public Assignment getForIndicesAssignment_1() { return cForIndicesAssignment_1; }
+
+		//for_indices
+		public RuleCall getForIndicesFor_indicesParserRuleCall_1_0() { return cForIndicesFor_indicesParserRuleCall_1_0; }
+
+		//"loop"
+		public Keyword getLoopKeyword_2() { return cLoopKeyword_2; }
+
+		//(algorithmClauses+=algorithm SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//algorithmClauses+=algorithm
+		public Assignment getAlgorithmClausesAssignment_3_0() { return cAlgorithmClausesAssignment_3_0; }
+
+		//algorithm
+		public RuleCall getAlgorithmClausesAlgorithmParserRuleCall_3_0_0() { return cAlgorithmClausesAlgorithmParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//"end"
+		public Keyword getEndKeyword_4() { return cEndKeyword_4; }
+
+		//"for"
+		public Keyword getForKeyword_5() { return cForKeyword_5; }
+	}
+
+	public class While_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "while_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cWhileKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cLoopKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cAlgorithmClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cAlgorithmClausesAlgorithmParserRuleCall_3_0_0 = (RuleCall)cAlgorithmClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Keyword cEndKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Keyword cWhileKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//while_clause returns WhileClause:
+		//  "while" condition=expression "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+		//  "while";
+		public ParserRule getRule() { return rule; }
+
+		//"while" condition=expression "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+		//"while"
+		public Group getGroup() { return cGroup; }
+
+		//"while"
+		public Keyword getWhileKeyword_0() { return cWhileKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"loop"
+		public Keyword getLoopKeyword_2() { return cLoopKeyword_2; }
+
+		//(algorithmClauses+=algorithm SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//algorithmClauses+=algorithm
+		public Assignment getAlgorithmClausesAssignment_3_0() { return cAlgorithmClausesAssignment_3_0; }
+
+		//algorithm
+		public RuleCall getAlgorithmClausesAlgorithmParserRuleCall_3_0_0() { return cAlgorithmClausesAlgorithmParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//"end"
+		public Keyword getEndKeyword_4() { return cEndKeyword_4; }
+
+		//"while"
+		public Keyword getWhileKeyword_5() { return cWhileKeyword_5; }
+	}
+
+	public class When_clause_eElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "when_clause_e");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cWhenKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenEquationClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenEquationClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenEquationClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Assignment cElseWhenClausesAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cElseWhenClausesElse_when_eParserRuleCall_4_0 = (RuleCall)cElseWhenClausesAssignment_4.eContents().get(0);
+		private final Keyword cEndKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Keyword cWhenKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//when_clause_e:
+		//  "when" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+		//  elseWhenClauses+=else_when_e* "end" "when";
+		public ParserRule getRule() { return rule; }
+
+		//"when" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+		//elseWhenClauses+=else_when_e* "end" "when"
+		public Group getGroup() { return cGroup; }
+
+		//"when"
+		public Keyword getWhenKeyword_0() { return cWhenKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenEquationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenEquationClauses+=equation_rule
+		public Assignment getThenEquationClausesAssignment_3_0() { return cThenEquationClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenEquationClausesEquation_ruleParserRuleCall_3_0_0() { return cThenEquationClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//elseWhenClauses+=else_when_e*
+		public Assignment getElseWhenClausesAssignment_4() { return cElseWhenClausesAssignment_4; }
+
+		//else_when_e
+		public RuleCall getElseWhenClausesElse_when_eParserRuleCall_4_0() { return cElseWhenClausesElse_when_eParserRuleCall_4_0; }
+
+		//"end"
+		public Keyword getEndKeyword_5() { return cEndKeyword_5; }
+
+		//"when"
+		public Keyword getWhenKeyword_6() { return cWhenKeyword_6; }
+	}
+
+	public class Else_when_eElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "else_when_e");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cElsewhenKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenEquationClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenEquationClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenEquationClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		
+		//else_when_e:
+		//  "elsewhen" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON
+		//  )*;
+		public ParserRule getRule() { return rule; }
+
+		//"elsewhen" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON
+		//)*
+		public Group getGroup() { return cGroup; }
+
+		//"elsewhen"
+		public Keyword getElsewhenKeyword_0() { return cElsewhenKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenEquationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenEquationClauses+=equation_rule
+		public Assignment getThenEquationClausesAssignment_3_0() { return cThenEquationClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenEquationClausesEquation_ruleParserRuleCall_3_0_0() { return cThenEquationClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+	}
+
+	public class When_clause_aElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "when_clause_a");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cWhenKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenAlgorithmClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenAlgorithmClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Assignment cElseWhenClausesAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cElseWhenClausesElse_when_aParserRuleCall_4_0 = (RuleCall)cElseWhenClausesAssignment_4.eContents().get(0);
+		private final Keyword cEndKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Keyword cWhenKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//when_clause_a:
+		//  "when" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+		//  elseWhenClauses+=else_when_a* "end" "when";
+		public ParserRule getRule() { return rule; }
+
+		//"when" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+		//elseWhenClauses+=else_when_a* "end" "when"
+		public Group getGroup() { return cGroup; }
+
+		//"when"
+		public Keyword getWhenKeyword_0() { return cWhenKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenAlgorithmClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenAlgorithmClauses+=equation_rule
+		public Assignment getThenAlgorithmClausesAssignment_3_0() { return cThenAlgorithmClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0() { return cThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+
+		//elseWhenClauses+=else_when_a*
+		public Assignment getElseWhenClausesAssignment_4() { return cElseWhenClausesAssignment_4; }
+
+		//else_when_a
+		public RuleCall getElseWhenClausesElse_when_aParserRuleCall_4_0() { return cElseWhenClausesElse_when_aParserRuleCall_4_0; }
+
+		//"end"
+		public Keyword getEndKeyword_5() { return cEndKeyword_5; }
+
+		//"when"
+		public Keyword getWhenKeyword_6() { return cWhenKeyword_6; }
+	}
+
+	public class Else_when_aElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "else_when_a");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cElsewhenKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenAlgorithmClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenAlgorithmClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		
+		//else_when_a:
+		//  "elsewhen" condition=expression "then" (thenAlgorithmClauses+=equation_rule
+		//  SEMICOLON)*;
+		public ParserRule getRule() { return rule; }
+
+		//"elsewhen" condition=expression "then" (thenAlgorithmClauses+=equation_rule
+		//SEMICOLON)*
+		public Group getGroup() { return cGroup; }
+
+		//"elsewhen"
+		public Keyword getElsewhenKeyword_0() { return cElsewhenKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenAlgorithmClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenAlgorithmClauses+=equation_rule
+		public Assignment getThenAlgorithmClausesAssignment_3_0() { return cThenAlgorithmClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0() { return cThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+	}
+
+	public class Equation_rule_elseifElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "equation_rule_elseif");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cElseifKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenEquationClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenEquationClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenEquationClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		
+		//equation_rule_elseif:
+		//  "elseif" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+		//;
+		public ParserRule getRule() { return rule; }
+
+		//"elseif" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup() { return cGroup; }
+
+		//"elseif"
+		public Keyword getElseifKeyword_0() { return cElseifKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenEquationClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenEquationClauses+=equation_rule
+		public Assignment getThenEquationClausesAssignment_3_0() { return cThenEquationClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenEquationClausesEquation_ruleParserRuleCall_3_0_0() { return cThenEquationClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+	}
+
+	public class Algorithm_elseifElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "algorithm_elseif");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cElseifKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cThenAlgorithmClausesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0 = (RuleCall)cThenAlgorithmClausesAssignment_3_0.eContents().get(0);
+		private final RuleCall cSEMICOLONTerminalRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		
+		//algorithm_elseif:
+		//  "elseif" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)
+		//  *;
+		public ParserRule getRule() { return rule; }
+
+		//"elseif" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)
+		// *
+		public Group getGroup() { return cGroup; }
+
+		//"elseif"
+		public Keyword getElseifKeyword_0() { return cElseifKeyword_0; }
+
+		//condition=expression
+		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
+
+		//expression
+		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//(thenAlgorithmClauses+=equation_rule SEMICOLON)*
+		public Group getGroup_3() { return cGroup_3; }
+
+		//thenAlgorithmClauses+=equation_rule
+		public Assignment getThenAlgorithmClausesAssignment_3_0() { return cThenAlgorithmClausesAssignment_3_0; }
+
+		//equation_rule
+		public RuleCall getThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0() { return cThenAlgorithmClausesEquation_ruleParserRuleCall_3_0_0; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_3_1() { return cSEMICOLONTerminalRuleCall_3_1; }
+	}
+
+	public class Connect_clauseElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "connect_clause");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cConnectKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cLPARTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final RuleCall cConnector_refParserRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		private final RuleCall cCOMMATerminalRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		private final RuleCall cConnector_refParserRuleCall_4 = (RuleCall)cGroup.eContents().get(4);
+		private final RuleCall cRPARTerminalRuleCall_5 = (RuleCall)cGroup.eContents().get(5);
+		
+		//connect_clause returns ecore::EString:
+		//  "connect" LPAR connector_ref COMMA connector_ref RPAR;
+		public ParserRule getRule() { return rule; }
+
+		//"connect" LPAR connector_ref COMMA connector_ref RPAR
+		public Group getGroup() { return cGroup; }
+
+		//"connect"
+		public Keyword getConnectKeyword_0() { return cConnectKeyword_0; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_1() { return cLPARTerminalRuleCall_1; }
+
+		//connector_ref
+		public RuleCall getConnector_refParserRuleCall_2() { return cConnector_refParserRuleCall_2; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_3() { return cCOMMATerminalRuleCall_3; }
+
+		//connector_ref
+		public RuleCall getConnector_refParserRuleCall_4() { return cConnector_refParserRuleCall_4; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_5() { return cRPARTerminalRuleCall_5; }
+	}
+
+	public class Connector_refElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "connector_ref");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cArray_subscriptsParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final RuleCall cDOTTerminalRuleCall_2_0 = (RuleCall)cGroup_2.eContents().get(0);
+		private final RuleCall cConnector_ref_2ParserRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
+		
+		//connector_ref returns ecore::EString:
+		//  IDENT array_subscripts? (DOT connector_ref_2)?;
+		public ParserRule getRule() { return rule; }
+
+		//IDENT array_subscripts? (DOT connector_ref_2)?
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//array_subscripts?
+		public RuleCall getArray_subscriptsParserRuleCall_1() { return cArray_subscriptsParserRuleCall_1; }
+
+		//(DOT connector_ref_2)?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//DOT
+		public RuleCall getDOTTerminalRuleCall_2_0() { return cDOTTerminalRuleCall_2_0; }
+
+		//connector_ref_2
+		public RuleCall getConnector_ref_2ParserRuleCall_2_1() { return cConnector_ref_2ParserRuleCall_2_1; }
+	}
+
+	public class Connector_ref_2Elements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "connector_ref_2");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cArray_subscriptsParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//connector_ref_2 returns ecore::EString:
+		//  IDENT array_subscripts?; 
+		//
+		//  
+		//	      
+		//	
+		//
+		/// *
+		// * 2.2.7 Expressions
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//IDENT array_subscripts?
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//array_subscripts?
+		public RuleCall getArray_subscriptsParserRuleCall_1() { return cArray_subscriptsParserRuleCall_1; }
+	}
+
+	public class ExpressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "expression");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cIf_expressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cSimple_expressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//expression returns ecore::EString:
+		//  if_expression|simple_expression; 
+		//
+		/// *
+		// * 2.2.7 Expressions
+		// * /
+		//  
+		//	  
+		//	  
+		//	//| code_expression
+		//	 / *| (MATCHCONTINUE expression_or_empty
+		//	   local_clause
+		//	   cases
+		//	   T_END MATCHCONTINUE)
+		//	| (MATCH expression_or_empty
+		//	   local_clause
+		//	   cases
+		//	   T_END MATCH)
+		//	   * /
+		public ParserRule getRule() { return rule; }
+
+		//if_expression|simple_expression 
+		//	  
+		//	  
+		//	//| code_expression
+		//	 / *| (MATCHCONTINUE expression_or_empty
+		//	   local_clause
+		//	   cases
+		//	   T_END MATCHCONTINUE)
+		//	| (MATCH expression_or_empty
+		//	   local_clause
+		//	   cases
+		//	   T_END MATCH)
+		//	   * /
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//if_expression
+		public RuleCall getIf_expressionParserRuleCall_0() { return cIf_expressionParserRuleCall_0; }
+
+		//simple_expression   
+		//	//| code_expression
+		//	 / *| (MATCHCONTINUE expression_or_empty
+		//	   local_clause
+		//	   cases
+		//	   T_END MATCHCONTINUE)
+		//	| (MATCH expression_or_empty
+		//	   local_clause
+		//	   cases
+		//	   T_END MATCH)
+		//	   * /
+		public RuleCall getSimple_expressionParserRuleCall_1() { return cSimple_expressionParserRuleCall_1; }
+	}
+
+	public class Expression_or_emptyElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "expression_or_empty");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final RuleCall cLPARTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cRPARTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//expression_or_empty returns ecore::EString:
+		//  expression|LPAR RPAR; 
+		//
+		//  
+		//	
+		//	    
+		//	
+		//
+		/// *
+		//// The element_list is now modified
+		//local_clause:
+		//	(LOCAL element_list)?
+		//	;
+		//
+		//cases:
+		//	(onecase)+ (ELSE string_comment local_clause (EQUATION equation_rule_list_then)?
+		//	THEN expression_or_empty SEMICOLON)?
+		//	;
+		//
+		//onecase:
+		//	(CASE pattern string_comment local_clause (EQUATION equation_rule_list_then)?
+		//	THEN expression_or_empty SEMICOLON)
+		//	;
+		//
+		//pattern:
+		//	expression_or_empty
+		//	;
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//expression|LPAR RPAR 
+		//
+		//  
+		//	
+		//	    
+		//	
+		//
+		/// *
+		//// The element_list is now modified
+		//local_clause:
+		//	(LOCAL element_list)?
+		//	;
+		//
+		//cases:
+		//	(onecase)+ (ELSE string_comment local_clause (EQUATION equation_rule_list_then)?
+		//	THEN expression_or_empty SEMICOLON)?
+		//	;
+		//
+		//onecase:
+		//	(CASE pattern string_comment local_clause (EQUATION equation_rule_list_then)?
+		//	THEN expression_or_empty SEMICOLON)
+		//	;
+		//
+		//pattern:
+		//	expression_or_empty
+		//	;
+		// * /
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_0() { return cExpressionParserRuleCall_0; }
+
+		//LPAR RPAR
+		public Group getGroup_1() { return cGroup_1; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_1_0() { return cLPARTerminalRuleCall_1_0; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_1_1() { return cRPARTerminalRuleCall_1_1; }
+	}
+
+	public class If_expressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "if_expression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final RuleCall cExpressionParserRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		private final RuleCall cElseif_expressionParserRuleCall_4 = (RuleCall)cGroup.eContents().get(4);
+		private final Keyword cElseKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final RuleCall cExpressionParserRuleCall_6 = (RuleCall)cGroup.eContents().get(6);
+		
+		//if_expression returns ecore::EString:
+		//  "if" expression "then" expression elseif_expression* "else" expression; 
+		//
+		/// *
+		//// The element_list is now modified
+		//local_clause:
+		//	(LOCAL element_list)?
+		//	;
+		//
+		//cases:
+		//	(onecase)+ (ELSE string_comment local_clause (EQUATION equation_rule_list_then)?
+		//	THEN expression_or_empty SEMICOLON)?
+		//	;
+		//
+		//onecase:
+		//	(CASE pattern string_comment local_clause (EQUATION equation_rule_list_then)?
+		//	THEN expression_or_empty SEMICOLON)
+		//	;
+		//
+		//pattern:
+		//	expression_or_empty
+		//	;
+		// * /
+		public ParserRule getRule() { return rule; }
+
+		//"if" expression "then" expression elseif_expression* "else" expression
+		public Group getGroup() { return cGroup; }
+
+		//"if"
+		public Keyword getIfKeyword_0() { return cIfKeyword_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1() { return cExpressionParserRuleCall_1; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_3() { return cExpressionParserRuleCall_3; }
+
+		//elseif_expression*
+		public RuleCall getElseif_expressionParserRuleCall_4() { return cElseif_expressionParserRuleCall_4; }
+
+		//"else"
+		public Keyword getElseKeyword_5() { return cElseKeyword_5; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_6() { return cExpressionParserRuleCall_6; }
+	}
+
+	public class Elseif_expressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "elseif_expression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cElseifKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final RuleCall cExpressionParserRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		
+		//elseif_expression returns ecore::EString:
+		//  "elseif" expression "then" expression;
+		public ParserRule getRule() { return rule; }
+
+		//"elseif" expression "then" expression
+		public Group getGroup() { return cGroup; }
+
+		//"elseif"
+		public Keyword getElseifKeyword_0() { return cElseifKeyword_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1() { return cExpressionParserRuleCall_1; }
+
+		//"then"
+		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_3() { return cExpressionParserRuleCall_3; }
+	}
+
+	public class For_indicesElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "for_indices");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cFor_indexParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cCOMMATerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cFor_indexParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//for_indices returns ecore::EString:
+		//  for_index (COMMA for_index)*;
+		public ParserRule getRule() { return rule; }
+
+		//for_index (COMMA for_index)*
+		public Group getGroup() { return cGroup; }
+
+		//for_index
+		public RuleCall getFor_indexParserRuleCall_0() { return cFor_indexParserRuleCall_0; }
+
+		//(COMMA for_index)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_0() { return cCOMMATerminalRuleCall_1_0; }
+
+		//for_index
+		public RuleCall getFor_indexParserRuleCall_1_1() { return cFor_indexParserRuleCall_1_1; }
+	}
+
+	public class For_indexElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "for_index");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cInKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cExpressionParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//for_index returns ecore::EString:
+		//  IDENT ("in" expression)?;
+		public ParserRule getRule() { return rule; }
+
+		//IDENT ("in" expression)?
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//("in" expression)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"in"
+		public Keyword getInKeyword_1_0() { return cInKeyword_1_0; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_1_1() { return cExpressionParserRuleCall_1_1; }
+	}
+
+	public class Simple_expressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "simple_expression");
+		private final RuleCall cSimple_exprParserRuleCall = (RuleCall)rule.eContents().get(1);
+		
+		//simple_expression returns ecore::EString:
+		//  simple_expr; 
+		//
+		//  
+		//	   
+		//	//(COLONCOLON simple_expr)*
+		//	 //| IDENT AS simple_expression
+		public ParserRule getRule() { return rule; }
+
+		//simple_expr 
+		//	   
+		//	//(COLONCOLON simple_expr)*
+		//	 //| IDENT AS simple_expression
+		public RuleCall getSimple_exprParserRuleCall() { return cSimple_exprParserRuleCall; }
+	}
+
+	public class Simple_exprElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "simple_expr");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cLogical_expressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cCOLONTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cLogical_expressionParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		private final Group cGroup_1_2 = (Group)cGroup_1.eContents().get(2);
+		private final RuleCall cCOLONTerminalRuleCall_1_2_0 = (RuleCall)cGroup_1_2.eContents().get(0);
+		private final RuleCall cLogical_expressionParserRuleCall_1_2_1 = (RuleCall)cGroup_1_2.eContents().get(1);
+		
+		//simple_expr returns ecore::EString:
+		//  logical_expression (COLON logical_expression (COLON logical_expression)?)?; 
+		//
+		//  
+		//	                
+		//	
+		//
+		/// * Code quotation mechanism * / 
+		/// *
+		//code_expression  :
+		//	CODE LPAR ((expression RPAR)=> e=expression | m=modification | el=element (SEMICOLON)?
+		//	| eq=code_equation_rule_clause | ieq=code_initial_equation_rule_clause
+		//	| alg=code_algorithm_clause | ialg=code_initial_algorithm_clause
+		//	)  RPAR
+		//	;
+		//
+		//code_equation_rule_clause :
+		//	( EQUATION ( equation_rule SEMICOLON | annotation SEMICOLON )*  )
+		//	;
+		//
+		//code_initial_equation_rule_clause :
+		//	{ LA(2)==EQUATION }?
+		//	INITIAL ec=code_equation_rule_clause 
+		//	;
+		//
+		//code_algorithm_clause :
+		//	'algorithm' (algorithm SEMICOLON | annotation SEMICOLON)*
+		//	;
+		//
+		//code_initial_algorithm_clause :
+		//	{ LA(2) == 'algorithm' }?
+		//	INITIAL 'algorithm'
+		//	( algorithm SEMICOLON | annotation SEMICOLON )* 
+		//	;
+		// * /
+		/// * End Code quotation mechanism * /
+		public ParserRule getRule() { return rule; }
+
+		//logical_expression (COLON logical_expression (COLON logical_expression)?)?
+		public Group getGroup() { return cGroup; }
+
+		//logical_expression
+		public RuleCall getLogical_expressionParserRuleCall_0() { return cLogical_expressionParserRuleCall_0; }
+
+		//(COLON logical_expression (COLON logical_expression)?)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//COLON
+		public RuleCall getCOLONTerminalRuleCall_1_0() { return cCOLONTerminalRuleCall_1_0; }
+
+		//logical_expression
+		public RuleCall getLogical_expressionParserRuleCall_1_1() { return cLogical_expressionParserRuleCall_1_1; }
+
+		//(COLON logical_expression)?
+		public Group getGroup_1_2() { return cGroup_1_2; }
+
+		//COLON
+		public RuleCall getCOLONTerminalRuleCall_1_2_0() { return cCOLONTerminalRuleCall_1_2_0; }
+
+		//logical_expression
+		public RuleCall getLogical_expressionParserRuleCall_1_2_1() { return cLogical_expressionParserRuleCall_1_2_1; }
+	}
+
+	public class Logical_expressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "logical_expression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cLogical_termParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cOrKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cLogical_termParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//logical_expression returns ecore::EString:
+		//  logical_term ("or" logical_term)*; 
+		//
+		/// * Code quotation mechanism * / 
+		/// *
+		//code_expression  :
+		//	CODE LPAR ((expression RPAR)=> e=expression | m=modification | el=element (SEMICOLON)?
+		//	| eq=code_equation_rule_clause | ieq=code_initial_equation_rule_clause
+		//	| alg=code_algorithm_clause | ialg=code_initial_algorithm_clause
+		//	)  RPAR
+		//	;
+		//
+		//code_equation_rule_clause :
+		//	( EQUATION ( equation_rule SEMICOLON | annotation SEMICOLON )*  )
+		//	;
+		//
+		//code_initial_equation_rule_clause :
+		//	{ LA(2)==EQUATION }?
+		//	INITIAL ec=code_equation_rule_clause 
+		//	;
+		//
+		//code_algorithm_clause :
+		//	'algorithm' (algorithm SEMICOLON | annotation SEMICOLON)*
+		//	;
+		//
+		//code_initial_algorithm_clause :
+		//	{ LA(2) == 'algorithm' }?
+		//	INITIAL 'algorithm'
+		//	( algorithm SEMICOLON | annotation SEMICOLON )* 
+		//	;
+		// * /
+		/// * End Code quotation mechanism * /
+		public ParserRule getRule() { return rule; }
+
+		//logical_term ("or" logical_term)*
+		public Group getGroup() { return cGroup; }
+
+		//logical_term
+		public RuleCall getLogical_termParserRuleCall_0() { return cLogical_termParserRuleCall_0; }
+
+		//("or" logical_term)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"or"
+		public Keyword getOrKeyword_1_0() { return cOrKeyword_1_0; }
+
+		//logical_term
+		public RuleCall getLogical_termParserRuleCall_1_1() { return cLogical_termParserRuleCall_1_1; }
+	}
+
+	public class Logical_termElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "logical_term");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cLogical_factorParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cAndKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cLogical_factorParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//logical_term returns ecore::EString:
+		//  logical_factor ("and" logical_factor)*;
+		public ParserRule getRule() { return rule; }
+
+		//logical_factor ("and" logical_factor)*
+		public Group getGroup() { return cGroup; }
+
+		//logical_factor
+		public RuleCall getLogical_factorParserRuleCall_0() { return cLogical_factorParserRuleCall_0; }
+
+		//("and" logical_factor)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"and"
+		public Keyword getAndKeyword_1_0() { return cAndKeyword_1_0; }
+
+		//logical_factor
+		public RuleCall getLogical_factorParserRuleCall_1_1() { return cLogical_factorParserRuleCall_1_1; }
+	}
+
+	public class Logical_factorElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "logical_factor");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cNotKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cRelationParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//logical_factor returns ecore::EString:
+		//  "not"? relation;
+		public ParserRule getRule() { return rule; }
+
+		//"not"? relation
+		public Group getGroup() { return cGroup; }
+
+		//"not"?
+		public Keyword getNotKeyword_0() { return cNotKeyword_0; }
+
+		//relation
+		public RuleCall getRelationParserRuleCall_1() { return cRelationParserRuleCall_1; }
+	}
+
+	public class RelationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "relation");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cArithmetic_expressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Alternatives cAlternatives_1_0 = (Alternatives)cGroup_1.eContents().get(0);
+		private final RuleCall cLESSTerminalRuleCall_1_0_0 = (RuleCall)cAlternatives_1_0.eContents().get(0);
+		private final RuleCall cLESSEQTerminalRuleCall_1_0_1 = (RuleCall)cAlternatives_1_0.eContents().get(1);
+		private final RuleCall cGREATERTerminalRuleCall_1_0_2 = (RuleCall)cAlternatives_1_0.eContents().get(2);
+		private final RuleCall cGREATEREQTerminalRuleCall_1_0_3 = (RuleCall)cAlternatives_1_0.eContents().get(3);
+		private final RuleCall cEQEQTerminalRuleCall_1_0_4 = (RuleCall)cAlternatives_1_0.eContents().get(4);
+		private final RuleCall cLESSGTTerminalRuleCall_1_0_5 = (RuleCall)cAlternatives_1_0.eContents().get(5);
+		private final RuleCall cArithmetic_expressionParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//relation returns ecore::EString:
+		//  arithmetic_expression ((LESS|LESSEQ|GREATER|GREATEREQ|EQEQ|LESSGT)
+		//  arithmetic_expression)?;
+		public ParserRule getRule() { return rule; }
+
+		//arithmetic_expression ((LESS|LESSEQ|GREATER|GREATEREQ|EQEQ|LESSGT)
+		//arithmetic_expression)?
+		public Group getGroup() { return cGroup; }
+
+		//arithmetic_expression
+		public RuleCall getArithmetic_expressionParserRuleCall_0() { return cArithmetic_expressionParserRuleCall_0; }
+
+		//((LESS|LESSEQ|GREATER|GREATEREQ|EQEQ|LESSGT) arithmetic_expression)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//LESS|LESSEQ|GREATER|GREATEREQ|EQEQ|LESSGT
+		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
+
+		//LESS
+		public RuleCall getLESSTerminalRuleCall_1_0_0() { return cLESSTerminalRuleCall_1_0_0; }
+
+		//LESSEQ
+		public RuleCall getLESSEQTerminalRuleCall_1_0_1() { return cLESSEQTerminalRuleCall_1_0_1; }
+
+		//GREATER
+		public RuleCall getGREATERTerminalRuleCall_1_0_2() { return cGREATERTerminalRuleCall_1_0_2; }
+
+		//GREATEREQ
+		public RuleCall getGREATEREQTerminalRuleCall_1_0_3() { return cGREATEREQTerminalRuleCall_1_0_3; }
+
+		//EQEQ
+		public RuleCall getEQEQTerminalRuleCall_1_0_4() { return cEQEQTerminalRuleCall_1_0_4; }
+
+		//LESSGT
+		public RuleCall getLESSGTTerminalRuleCall_1_0_5() { return cLESSGTTerminalRuleCall_1_0_5; }
+
+		//arithmetic_expression
+		public RuleCall getArithmetic_expressionParserRuleCall_1_1() { return cArithmetic_expressionParserRuleCall_1_1; }
+	}
+
+	public class Arithmetic_expressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "arithmetic_expression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cUnary_arithmetic_expressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Alternatives cAlternatives_1_0 = (Alternatives)cGroup_1.eContents().get(0);
+		private final RuleCall cPLUSTerminalRuleCall_1_0_0 = (RuleCall)cAlternatives_1_0.eContents().get(0);
+		private final RuleCall cMINUSTerminalRuleCall_1_0_1 = (RuleCall)cAlternatives_1_0.eContents().get(1);
+		private final RuleCall cPLUS_EWTerminalRuleCall_1_0_2 = (RuleCall)cAlternatives_1_0.eContents().get(2);
+		private final RuleCall cMINUS_EWTerminalRuleCall_1_0_3 = (RuleCall)cAlternatives_1_0.eContents().get(3);
+		private final RuleCall cTermParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//arithmetic_expression returns ecore::EString:
+		//  unary_arithmetic_expression ((PLUS|MINUS|PLUS_EW|MINUS_EW) term)*;
+		public ParserRule getRule() { return rule; }
+
+		//unary_arithmetic_expression ((PLUS|MINUS|PLUS_EW|MINUS_EW) term)*
+		public Group getGroup() { return cGroup; }
+
+		//unary_arithmetic_expression
+		public RuleCall getUnary_arithmetic_expressionParserRuleCall_0() { return cUnary_arithmetic_expressionParserRuleCall_0; }
+
+		//((PLUS|MINUS|PLUS_EW|MINUS_EW) term)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//PLUS|MINUS|PLUS_EW|MINUS_EW
+		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
+
+		//PLUS
+		public RuleCall getPLUSTerminalRuleCall_1_0_0() { return cPLUSTerminalRuleCall_1_0_0; }
+
+		//MINUS
+		public RuleCall getMINUSTerminalRuleCall_1_0_1() { return cMINUSTerminalRuleCall_1_0_1; }
+
+		//PLUS_EW
+		public RuleCall getPLUS_EWTerminalRuleCall_1_0_2() { return cPLUS_EWTerminalRuleCall_1_0_2; }
+
+		//MINUS_EW
+		public RuleCall getMINUS_EWTerminalRuleCall_1_0_3() { return cMINUS_EWTerminalRuleCall_1_0_3; }
+
+		//term
+		public RuleCall getTermParserRuleCall_1_1() { return cTermParserRuleCall_1_1; }
+	}
+
+	public class Unary_arithmetic_expressionElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "unary_arithmetic_expression");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final RuleCall cPLUSTerminalRuleCall_0_0 = (RuleCall)cGroup_0.eContents().get(0);
+		private final RuleCall cTermParserRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final RuleCall cMINUSTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cTermParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
+		private final RuleCall cPLUS_EWTerminalRuleCall_2_0 = (RuleCall)cGroup_2.eContents().get(0);
+		private final RuleCall cTermParserRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
+		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
+		private final RuleCall cMINUS_EWTerminalRuleCall_3_0 = (RuleCall)cGroup_3.eContents().get(0);
+		private final RuleCall cTermParserRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final RuleCall cTermParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
+		
+		//unary_arithmetic_expression returns ecore::EString:
+		//  PLUS term|MINUS term|PLUS_EW term|MINUS_EW term|term;
+		public ParserRule getRule() { return rule; }
+
+		//PLUS term|MINUS term|PLUS_EW term|MINUS_EW term|term
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//PLUS term
+		public Group getGroup_0() { return cGroup_0; }
+
+		//PLUS
+		public RuleCall getPLUSTerminalRuleCall_0_0() { return cPLUSTerminalRuleCall_0_0; }
+
+		//term
+		public RuleCall getTermParserRuleCall_0_1() { return cTermParserRuleCall_0_1; }
+
+		//MINUS term
+		public Group getGroup_1() { return cGroup_1; }
+
+		//MINUS
+		public RuleCall getMINUSTerminalRuleCall_1_0() { return cMINUSTerminalRuleCall_1_0; }
+
+		//term
+		public RuleCall getTermParserRuleCall_1_1() { return cTermParserRuleCall_1_1; }
+
+		//PLUS_EW term
+		public Group getGroup_2() { return cGroup_2; }
+
+		//PLUS_EW
+		public RuleCall getPLUS_EWTerminalRuleCall_2_0() { return cPLUS_EWTerminalRuleCall_2_0; }
+
+		//term
+		public RuleCall getTermParserRuleCall_2_1() { return cTermParserRuleCall_2_1; }
+
+		//MINUS_EW term
+		public Group getGroup_3() { return cGroup_3; }
+
+		//MINUS_EW
+		public RuleCall getMINUS_EWTerminalRuleCall_3_0() { return cMINUS_EWTerminalRuleCall_3_0; }
+
+		//term
+		public RuleCall getTermParserRuleCall_3_1() { return cTermParserRuleCall_3_1; }
+
+		//term
+		public RuleCall getTermParserRuleCall_4() { return cTermParserRuleCall_4; }
+	}
+
+	public class TermElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "term");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cFactorParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Alternatives cAlternatives_1_0 = (Alternatives)cGroup_1.eContents().get(0);
+		private final RuleCall cSTARTerminalRuleCall_1_0_0 = (RuleCall)cAlternatives_1_0.eContents().get(0);
+		private final RuleCall cSLASHTerminalRuleCall_1_0_1 = (RuleCall)cAlternatives_1_0.eContents().get(1);
+		private final RuleCall cSTAR_EWTerminalRuleCall_1_0_2 = (RuleCall)cAlternatives_1_0.eContents().get(2);
+		private final RuleCall cSLASH_EWTerminalRuleCall_1_0_3 = (RuleCall)cAlternatives_1_0.eContents().get(3);
+		private final RuleCall cFactorParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//term returns ecore::EString:
+		//  factor ((STAR|SLASH|STAR_EW|SLASH_EW) factor)*;
+		public ParserRule getRule() { return rule; }
+
+		//factor ((STAR|SLASH|STAR_EW|SLASH_EW) factor)*
+		public Group getGroup() { return cGroup; }
+
+		//factor
+		public RuleCall getFactorParserRuleCall_0() { return cFactorParserRuleCall_0; }
+
+		//((STAR|SLASH|STAR_EW|SLASH_EW) factor)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//STAR|SLASH|STAR_EW|SLASH_EW
+		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
+
+		//STAR
+		public RuleCall getSTARTerminalRuleCall_1_0_0() { return cSTARTerminalRuleCall_1_0_0; }
+
+		//SLASH
+		public RuleCall getSLASHTerminalRuleCall_1_0_1() { return cSLASHTerminalRuleCall_1_0_1; }
+
+		//STAR_EW
+		public RuleCall getSTAR_EWTerminalRuleCall_1_0_2() { return cSTAR_EWTerminalRuleCall_1_0_2; }
+
+		//SLASH_EW
+		public RuleCall getSLASH_EWTerminalRuleCall_1_0_3() { return cSLASH_EWTerminalRuleCall_1_0_3; }
+
+		//factor
+		public RuleCall getFactorParserRuleCall_1_1() { return cFactorParserRuleCall_1_1; }
+	}
+
+	public class FactorElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "factor");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cPrimaryParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Alternatives cAlternatives_1_0 = (Alternatives)cGroup_1.eContents().get(0);
+		private final RuleCall cPOWERTerminalRuleCall_1_0_0 = (RuleCall)cAlternatives_1_0.eContents().get(0);
+		private final RuleCall cPOWER_EWTerminalRuleCall_1_0_1 = (RuleCall)cAlternatives_1_0.eContents().get(1);
+		private final RuleCall cPrimaryParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//factor returns ecore::EString:
+		//  primary ((POWER|POWER_EW) primary)?;
+		public ParserRule getRule() { return rule; }
+
+		//primary ((POWER|POWER_EW) primary)?
+		public Group getGroup() { return cGroup; }
+
+		//primary
+		public RuleCall getPrimaryParserRuleCall_0() { return cPrimaryParserRuleCall_0; }
+
+		//((POWER|POWER_EW) primary)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//POWER|POWER_EW
+		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
+
+		//POWER
+		public RuleCall getPOWERTerminalRuleCall_1_0_0() { return cPOWERTerminalRuleCall_1_0_0; }
+
+		//POWER_EW
+		public RuleCall getPOWER_EWTerminalRuleCall_1_0_1() { return cPOWER_EWTerminalRuleCall_1_0_1; }
+
+		//primary
+		public RuleCall getPrimaryParserRuleCall_1_1() { return cPrimaryParserRuleCall_1_1; }
+	}
+
+	public class PrimaryElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "primary");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cUNSIGNED_INTEGERTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cUNSIGNED_REALTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cSTRINGTerminalRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final Keyword cFalseKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
+		private final Keyword cTrueKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
+		private final RuleCall cComponent_reference__function_callParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
+		private final Group cGroup_6 = (Group)cAlternatives.eContents().get(6);
+		private final Keyword cDerKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
+		private final RuleCall cFunction_callParserRuleCall_6_1 = (RuleCall)cGroup_6.eContents().get(1);
+		private final Group cGroup_7 = (Group)cAlternatives.eContents().get(7);
+		private final RuleCall cLPARTerminalRuleCall_7_0 = (RuleCall)cGroup_7.eContents().get(0);
+		private final RuleCall cExpression_listParserRuleCall_7_1 = (RuleCall)cGroup_7.eContents().get(1);
+		private final RuleCall cRPARTerminalRuleCall_7_2 = (RuleCall)cGroup_7.eContents().get(2);
+		private final Group cGroup_8 = (Group)cAlternatives.eContents().get(8);
+		private final RuleCall cLBRACKTerminalRuleCall_8_0 = (RuleCall)cGroup_8.eContents().get(0);
+		private final RuleCall cExpression_listParserRuleCall_8_1 = (RuleCall)cGroup_8.eContents().get(1);
+		private final Group cGroup_8_2 = (Group)cGroup_8.eContents().get(2);
+		private final RuleCall cSEMICOLONTerminalRuleCall_8_2_0 = (RuleCall)cGroup_8_2.eContents().get(0);
+		private final RuleCall cExpression_listParserRuleCall_8_2_1 = (RuleCall)cGroup_8_2.eContents().get(1);
+		private final RuleCall cRBRACKTerminalRuleCall_8_3 = (RuleCall)cGroup_8.eContents().get(3);
+		private final Group cGroup_9 = (Group)cAlternatives.eContents().get(9);
+		private final RuleCall cLBRACETerminalRuleCall_9_0 = (RuleCall)cGroup_9.eContents().get(0);
+		private final RuleCall cFor_or_expression_listParserRuleCall_9_1 = (RuleCall)cGroup_9.eContents().get(1);
+		private final RuleCall cRBRACETerminalRuleCall_9_2 = (RuleCall)cGroup_9.eContents().get(2);
+		private final Keyword cEndKeyword_10 = (Keyword)cAlternatives.eContents().get(10);
+		
+		//primary returns ecore::EString:
+		//  UNSIGNED_INTEGER|UNSIGNED_REAL|STRING|"false"|"true"|
+		//  component_reference__function_call|"der" function_call|LPAR expression_list RPAR|
+		//  LBRACK expression_list (SEMICOLON expression_list)* RBRACK|LBRACE
+		//  for_or_expression_list RBRACE|"end";
+		public ParserRule getRule() { return rule; }
+
+		//UNSIGNED_INTEGER|UNSIGNED_REAL|STRING|"false"|"true"|
+		//component_reference__function_call|"der" function_call|LPAR expression_list RPAR|
+		//LBRACK expression_list (SEMICOLON expression_list)* RBRACK|LBRACE
+		//for_or_expression_list RBRACE|"end"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//UNSIGNED_INTEGER
+		public RuleCall getUNSIGNED_INTEGERTerminalRuleCall_0() { return cUNSIGNED_INTEGERTerminalRuleCall_0; }
+
+		//UNSIGNED_REAL
+		public RuleCall getUNSIGNED_REALTerminalRuleCall_1() { return cUNSIGNED_REALTerminalRuleCall_1; }
+
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_2() { return cSTRINGTerminalRuleCall_2; }
+
+		//"false"
+		public Keyword getFalseKeyword_3() { return cFalseKeyword_3; }
+
+		//"true"
+		public Keyword getTrueKeyword_4() { return cTrueKeyword_4; }
+
+		//component_reference__function_call
+		public RuleCall getComponent_reference__function_callParserRuleCall_5() { return cComponent_reference__function_callParserRuleCall_5; }
+
+		//"der" function_call
+		public Group getGroup_6() { return cGroup_6; }
+
+		//"der"
+		public Keyword getDerKeyword_6_0() { return cDerKeyword_6_0; }
+
+		//function_call
+		public RuleCall getFunction_callParserRuleCall_6_1() { return cFunction_callParserRuleCall_6_1; }
+
+		//LPAR expression_list RPAR
+		public Group getGroup_7() { return cGroup_7; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_7_0() { return cLPARTerminalRuleCall_7_0; }
+
+		//expression_list
+		public RuleCall getExpression_listParserRuleCall_7_1() { return cExpression_listParserRuleCall_7_1; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_7_2() { return cRPARTerminalRuleCall_7_2; }
+
+		//LBRACK expression_list (SEMICOLON expression_list)* RBRACK
+		public Group getGroup_8() { return cGroup_8; }
+
+		//LBRACK
+		public RuleCall getLBRACKTerminalRuleCall_8_0() { return cLBRACKTerminalRuleCall_8_0; }
+
+		//expression_list
+		public RuleCall getExpression_listParserRuleCall_8_1() { return cExpression_listParserRuleCall_8_1; }
+
+		//(SEMICOLON expression_list)*
+		public Group getGroup_8_2() { return cGroup_8_2; }
+
+		//SEMICOLON
+		public RuleCall getSEMICOLONTerminalRuleCall_8_2_0() { return cSEMICOLONTerminalRuleCall_8_2_0; }
+
+		//expression_list
+		public RuleCall getExpression_listParserRuleCall_8_2_1() { return cExpression_listParserRuleCall_8_2_1; }
+
+		//RBRACK
+		public RuleCall getRBRACKTerminalRuleCall_8_3() { return cRBRACKTerminalRuleCall_8_3; }
+
+		//LBRACE for_or_expression_list RBRACE
+		public Group getGroup_9() { return cGroup_9; }
+
+		//LBRACE
+		public RuleCall getLBRACETerminalRuleCall_9_0() { return cLBRACETerminalRuleCall_9_0; }
+
+		//for_or_expression_list
+		public RuleCall getFor_or_expression_listParserRuleCall_9_1() { return cFor_or_expression_listParserRuleCall_9_1; }
+
+		//RBRACE
+		public RuleCall getRBRACETerminalRuleCall_9_2() { return cRBRACETerminalRuleCall_9_2; }
+
+		//"end"
+		public Keyword getEndKeyword_10() { return cEndKeyword_10; }
+	}
+
+	public class Component_reference__function_callElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "component_reference__function_call");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final RuleCall cComponent_referenceParserRuleCall_0_0 = (RuleCall)cGroup_0.eContents().get(0);
+		private final RuleCall cFunction_callParserRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Keyword cInitialKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cLPARTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		private final RuleCall cRPARTerminalRuleCall_1_2 = (RuleCall)cGroup_1.eContents().get(2);
+		
+		//component_reference__function_call returns ecore::EString:
+		//  component_reference function_call?|"initial" LPAR RPAR;
+		public ParserRule getRule() { return rule; }
+
+		//component_reference function_call?|"initial" LPAR RPAR
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//component_reference function_call?
+		public Group getGroup_0() { return cGroup_0; }
+
+		//component_reference
+		public RuleCall getComponent_referenceParserRuleCall_0_0() { return cComponent_referenceParserRuleCall_0_0; }
+
+		//function_call?
+		public RuleCall getFunction_callParserRuleCall_0_1() { return cFunction_callParserRuleCall_0_1; }
+
+		//"initial" LPAR RPAR
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"initial"
+		public Keyword getInitialKeyword_1_0() { return cInitialKeyword_1_0; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_1_1() { return cLPARTerminalRuleCall_1_1; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_1_2() { return cRPARTerminalRuleCall_1_2; }
+	}
+
+	public class Name_pathElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "name_path");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cDOTTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		private final RuleCall cName_pathParserRuleCall_1_2 = (RuleCall)cGroup_1.eContents().get(2);
+		
+		//name_path returns ecore::EString:
+		//  IDENT|IDENT DOT name_path; 
+		//
+		//  
+		//	//{ LA(2)!=DOT }?
+		public ParserRule getRule() { return rule; }
+
+		//IDENT|IDENT DOT name_path 
+		//
+		//  
+		//	//{ LA(2)!=DOT }?
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//IDENT 
+		//	//{ LA(2)!=DOT }?
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//IDENT DOT name_path 
+		//	//{ LA(2)!=DOT }?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_1_0() { return cIDENTTerminalRuleCall_1_0; }
+
+		//DOT
+		public RuleCall getDOTTerminalRuleCall_1_1() { return cDOTTerminalRuleCall_1_1; }
+
+		//name_path
+		public RuleCall getName_pathParserRuleCall_1_2() { return cName_pathParserRuleCall_1_2; }
+	}
+
+	public class Name_path_starElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "name_path_star");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final RuleCall cIDENTTerminalRuleCall_0_0 = (RuleCall)cGroup_0.eContents().get(0);
+		private final RuleCall cSTAR_EWTerminalRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cDOTTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		private final RuleCall cName_path_starParserRuleCall_1_2 = (RuleCall)cGroup_1.eContents().get(2);
+		
+		//name_path_star returns ecore::EString:
+		//  IDENT STAR_EW?|IDENT DOT name_path_star; 
+		//
+		// 
+		//	
+		//	//{ LA(2) != DOT }?
+		public ParserRule getRule() { return rule; }
+
+		//IDENT STAR_EW?|IDENT DOT name_path_star 
+		//
+		// 
+		//	
+		//	//{ LA(2) != DOT }?
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//IDENT STAR_EW? 
+		//	//{ LA(2) != DOT }?
+		public Group getGroup_0() { return cGroup_0; }
+
+		//IDENT 
+		//	//{ LA(2) != DOT }?
+		public RuleCall getIDENTTerminalRuleCall_0_0() { return cIDENTTerminalRuleCall_0_0; }
+
+		//STAR_EW?
+		public RuleCall getSTAR_EWTerminalRuleCall_0_1() { return cSTAR_EWTerminalRuleCall_0_1; }
+
+		//IDENT DOT name_path_star 
+		//	//{ LA(2) != DOT }?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_1_0() { return cIDENTTerminalRuleCall_1_0; }
+
+		//DOT
+		public RuleCall getDOTTerminalRuleCall_1_1() { return cDOTTerminalRuleCall_1_1; }
+
+		//name_path_star
+		public RuleCall getName_path_starParserRuleCall_1_2() { return cName_path_starParserRuleCall_1_2; }
+	}
+
+	public class Component_referenceElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "component_reference");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cArray_subscriptsParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final RuleCall cDOTTerminalRuleCall_2_0 = (RuleCall)cGroup_2.eContents().get(0);
+		private final RuleCall cComponent_referenceParserRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
+		
+		//component_reference returns ecore::EString:
+		//  IDENT array_subscripts? (DOT component_reference)?; 
+		//
+		//  
+		//	                
+		//	//| WILD
+		public ParserRule getRule() { return rule; }
+
+		//IDENT array_subscripts? (DOT component_reference)? 
+		//	                
+		//	//| WILD
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//array_subscripts?
+		public RuleCall getArray_subscriptsParserRuleCall_1() { return cArray_subscriptsParserRuleCall_1; }
+
+		//(DOT component_reference)?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//DOT
+		public RuleCall getDOTTerminalRuleCall_2_0() { return cDOTTerminalRuleCall_2_0; }
+
+		//component_reference
+		public RuleCall getComponent_referenceParserRuleCall_2_1() { return cComponent_referenceParserRuleCall_2_1; }
+	}
+
+	public class Function_callElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "function_call");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cLPARTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cFunction_argumentsParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final RuleCall cRPARTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		
+		//function_call returns ecore::EString:
+		//  LPAR function_arguments RPAR;
+		public ParserRule getRule() { return rule; }
+
+		//LPAR function_arguments RPAR
+		public Group getGroup() { return cGroup; }
+
+		//LPAR
+		public RuleCall getLPARTerminalRuleCall_0() { return cLPARTerminalRuleCall_0; }
+
+		//function_arguments
+		public RuleCall getFunction_argumentsParserRuleCall_1() { return cFunction_argumentsParserRuleCall_1; }
+
+		//RPAR
+		public RuleCall getRPARTerminalRuleCall_2() { return cRPARTerminalRuleCall_2; }
+	}
+
+	public class Function_argumentsElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "function_arguments");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cFor_or_expression_listParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cNamed_argumentsParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//function_arguments returns ecore::EString:
+		//  for_or_expression_list? named_arguments?;
+		public ParserRule getRule() { return rule; }
+
+		//for_or_expression_list? named_arguments?
+		public Group getGroup() { return cGroup; }
+
+		//for_or_expression_list?
+		public RuleCall getFor_or_expression_listParserRuleCall_0() { return cFor_or_expression_listParserRuleCall_0; }
+
+		//named_arguments?
+		public RuleCall getNamed_argumentsParserRuleCall_1() { return cNamed_argumentsParserRuleCall_1; }
+	}
+
+	public class For_or_expression_listElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "for_or_expression_list");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final RuleCall cCOMMATerminalRuleCall_1_0_0 = (RuleCall)cGroup_1_0.eContents().get(0);
+		private final RuleCall cFor_or_expression_list2ParserRuleCall_1_0_1 = (RuleCall)cGroup_1_0.eContents().get(1);
+		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
+		private final Keyword cForKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
+		private final RuleCall cFor_indicesParserRuleCall_1_1_1 = (RuleCall)cGroup_1_1.eContents().get(1);
+		
+		//for_or_expression_list returns ecore::EString:
+		//  expression (COMMA for_or_expression_list2?|"for" for_indices)?; 
+		//
+		//  
+		//	//({LA(1)==IDENT && LA(2) == EQUALS || LA(1) == RPAR || LA(1) == RBRACE}?|
+		public ParserRule getRule() { return rule; }
+
+		//expression (COMMA for_or_expression_list2?|"for" for_indices)?
+		public Group getGroup() { return cGroup; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_0() { return cExpressionParserRuleCall_0; }
+
+		//(COMMA for_or_expression_list2?|"for" for_indices)?
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//COMMA for_or_expression_list2?
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_0_0() { return cCOMMATerminalRuleCall_1_0_0; }
+
+		//for_or_expression_list2?
+		public RuleCall getFor_or_expression_list2ParserRuleCall_1_0_1() { return cFor_or_expression_list2ParserRuleCall_1_0_1; }
+
+		//"for" for_indices
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//"for"
+		public Keyword getForKeyword_1_1_0() { return cForKeyword_1_1_0; }
+
+		//for_indices
+		public RuleCall getFor_indicesParserRuleCall_1_1_1() { return cFor_indicesParserRuleCall_1_1_1; }
+	}
+
+	public class For_or_expression_list2Elements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "for_or_expression_list2");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cCOMMATerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cFor_or_expression_list2ParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//for_or_expression_list2 returns ecore::EString:
+		//  expression (COMMA for_or_expression_list2)?; 
+		//
+		//  
+		//	// {LA(2) == EQUALS}? |
+		public ParserRule getRule() { return rule; }
+
+		//expression (COMMA for_or_expression_list2)? 
+		//	// {LA(2) == EQUALS}? |
+		public Group getGroup() { return cGroup; }
+
+		//expression 
+		//	// {LA(2) == EQUALS}? |
+		public RuleCall getExpressionParserRuleCall_0() { return cExpressionParserRuleCall_0; }
+
+		//(COMMA for_or_expression_list2)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_0() { return cCOMMATerminalRuleCall_1_0; }
+
+		//for_or_expression_list2
+		public RuleCall getFor_or_expression_list2ParserRuleCall_1_1() { return cFor_or_expression_list2ParserRuleCall_1_1; }
+	}
+
+	public class Named_argumentsElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "named_arguments");
+		private final RuleCall cNamed_arguments2ParserRuleCall = (RuleCall)rule.eContents().get(1);
+		
+		//named_arguments returns ecore::EString:
+		//  named_arguments2;
+		public ParserRule getRule() { return rule; }
+
+		//named_arguments2
+		public RuleCall getNamed_arguments2ParserRuleCall() { return cNamed_arguments2ParserRuleCall; }
+	}
+
+	public class Named_arguments2Elements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "named_arguments2");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cNamed_argumentParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cCOMMATerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cNamed_argumentParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//named_arguments2 returns ecore::EString:
+		//  named_argument (COMMA named_argument)*;
+		public ParserRule getRule() { return rule; }
+
+		//named_argument (COMMA named_argument)*
+		public Group getGroup() { return cGroup; }
+
+		//named_argument
+		public RuleCall getNamed_argumentParserRuleCall_0() { return cNamed_argumentParserRuleCall_0; }
+
+		//(COMMA named_argument)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_0() { return cCOMMATerminalRuleCall_1_0; }
+
+		//named_argument
+		public RuleCall getNamed_argumentParserRuleCall_1_1() { return cNamed_argumentParserRuleCall_1_1; }
+	}
+
+	public class Named_argumentElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "named_argument");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cIDENTTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cEQUALSTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final RuleCall cExpressionParserRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
+		
+		//named_argument returns ecore::EString:
+		//  IDENT EQUALS expression;
+		public ParserRule getRule() { return rule; }
+
+		//IDENT EQUALS expression
+		public Group getGroup() { return cGroup; }
+
+		//IDENT
+		public RuleCall getIDENTTerminalRuleCall_0() { return cIDENTTerminalRuleCall_0; }
+
+		//EQUALS
+		public RuleCall getEQUALSTerminalRuleCall_1() { return cEQUALSTerminalRuleCall_1; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_2() { return cExpressionParserRuleCall_2; }
+	}
+
+	public class Expression_listElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "expression_list");
+		private final RuleCall cExpression_list2ParserRuleCall = (RuleCall)rule.eContents().get(1);
+		
+		//expression_list returns ecore::EString:
+		//  expression_list2;
+		public ParserRule getRule() { return rule; }
+
+		//expression_list2
+		public RuleCall getExpression_list2ParserRuleCall() { return cExpression_list2ParserRuleCall; }
+	}
+
+	public class Expression_list2Elements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "expression_list2");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cCOMMATerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cExpression_list2ParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//expression_list2 returns ecore::EString:
+		//  expression (COMMA expression_list2)?;
+		public ParserRule getRule() { return rule; }
+
+		//expression (COMMA expression_list2)?
+		public Group getGroup() { return cGroup; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_0() { return cExpressionParserRuleCall_0; }
+
+		//(COMMA expression_list2)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_1_0() { return cCOMMATerminalRuleCall_1_0; }
+
+		//expression_list2
+		public RuleCall getExpression_list2ParserRuleCall_1_1() { return cExpression_list2ParserRuleCall_1_1; }
+	}
+
+	public class Array_subscriptsElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "array_subscripts");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cLBRACKTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final RuleCall cSubscriptParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final RuleCall cCOMMATerminalRuleCall_2_0 = (RuleCall)cGroup_2.eContents().get(0);
+		private final RuleCall cSubscriptParserRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
+		private final RuleCall cRBRACKTerminalRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
+		
+		//array_subscripts returns ecore::EString:
+		//  LBRACK subscript (COMMA subscript)* RBRACK;
+		public ParserRule getRule() { return rule; }
+
+		//LBRACK subscript (COMMA subscript)* RBRACK
+		public Group getGroup() { return cGroup; }
+
+		//LBRACK
+		public RuleCall getLBRACKTerminalRuleCall_0() { return cLBRACKTerminalRuleCall_0; }
+
+		//subscript
+		public RuleCall getSubscriptParserRuleCall_1() { return cSubscriptParserRuleCall_1; }
+
+		//(COMMA subscript)*
+		public Group getGroup_2() { return cGroup_2; }
+
+		//COMMA
+		public RuleCall getCOMMATerminalRuleCall_2_0() { return cCOMMATerminalRuleCall_2_0; }
+
+		//subscript
+		public RuleCall getSubscriptParserRuleCall_2_1() { return cSubscriptParserRuleCall_2_1; }
+
+		//RBRACK
+		public RuleCall getRBRACKTerminalRuleCall_3() { return cRBRACKTerminalRuleCall_3; }
+	}
+
+	public class SubscriptElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "subscript");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cCOLONTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//subscript returns ecore::EString:
+		//  expression|COLON;
+		public ParserRule getRule() { return rule; }
+
+		//expression|COLON
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//expression
+		public RuleCall getExpressionParserRuleCall_0() { return cExpressionParserRuleCall_0; }
+
+		//COLON
+		public RuleCall getCOLONTerminalRuleCall_1() { return cCOLONTerminalRuleCall_1; }
+	}
+
+	public class CommentElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "comment");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cStringAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cStringString_commentParserRuleCall_0_0 = (RuleCall)cStringAssignment_0.eContents().get(0);
+		private final Assignment cAnnotationAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cAnnotationAnnotationParserRuleCall_1_0 = (RuleCall)cAnnotationAssignment_1.eContents().get(0);
+		
+		//comment returns Comment:
+		//  string=string_comment? annotation=annotation?;
+		public ParserRule getRule() { return rule; }
+
+		//string=string_comment? annotation=annotation?
+		public Group getGroup() { return cGroup; }
+
+		//string=string_comment?
+		public Assignment getStringAssignment_0() { return cStringAssignment_0; }
+
+		//string_comment
+		public RuleCall getStringString_commentParserRuleCall_0_0() { return cStringString_commentParserRuleCall_0_0; }
+
+		//annotation=annotation?
+		public Assignment getAnnotationAssignment_1() { return cAnnotationAssignment_1; }
+
+		//annotation
+		public RuleCall getAnnotationAnnotationParserRuleCall_1_0() { return cAnnotationAnnotationParserRuleCall_1_0; }
+	}
+
+	public class String_commentElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "string_comment");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final RuleCall cPLUSTerminalRuleCall_1_0 = (RuleCall)cGroup_1.eContents().get(0);
+		private final RuleCall cSTRINGTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//string_comment returns ecore::EString:
+		//  STRING (PLUS STRING)*;
+		public ParserRule getRule() { return rule; }
+
+		//STRING (PLUS STRING)*
+		public Group getGroup() { return cGroup; }
+
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }
+
+		//(PLUS STRING)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//PLUS
+		public RuleCall getPLUSTerminalRuleCall_1_0() { return cPLUSTerminalRuleCall_1_0; }
+
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_1_1() { return cSTRINGTerminalRuleCall_1_1; }
+	}
+
+	public class AnnotationElements implements IParserRuleAccess {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "annotation");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cAnnotationKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final RuleCall cClass_modificationParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//annotation returns Annotation:
+		//  "annotation" class_modification; 
+		//
+		//    
+		//	  
+		//	
+		//
+		//
+		//
+		/// *------------------------------------------------------------------
+		// * LEXER RULES
+		// *------------------------------------------------------------------* /
+		//
+		/// * Keywords * / 
+		//
+		////terminal T_ALGORITHM	: 'algorithm'	;
+		////terminal T_AND		: 'and'		;
+		////terminal T_ANNOTATION	: 'annotation'	;
+		////terminal BLOCK		: 'block'	;
+		////terminal CODE		: 'Code'	;
+		////terminal   CLASS		: 'class'	;
+		/// *
+		//terminal CONNECT	: 'connect'	;
+		//terminal CONNECTOR	: 'connector'	;
+		//terminal   CONSTANT	: 'constant'	;
+		//terminal   DISCRETE	: 'discrete'	;
+		//terminal   DER           : 'der' 	;
+		//terminal   EACH		: 'each'	;
+		//terminal   ELSE		: 'else'	;
+		//terminal   ELSEIF	: 'elseif'	;
+		//terminal   ELSEWHEN	: 'elsewhen'	;
+		//terminal   T_END		: 'end'		;
+		//terminal   ENUMERATION	: 'enumeration'	;
+		//terminal   EQUATION	: 'equation'	;
+		//terminal   ENCAPSULATED	: 'encapsulated';
+		//terminal   EXPANDABLE	: 'expandable'  ;
+		//terminal   EXTENDS	: 'extends'     ;
+		//terminal   CONSTRAINEDBY : 'constrainedby' ;
+		//terminal   EXTERNAL	: 'external'	;
+		//terminal   T_FALSE	: 'false'	;
+		////terminal   FINAL		: 'final'	;
+		//terminal   FLOW		: 'flow'	;
+		//terminal   FOR		: 'for'		;
+		//terminal   FUNCTION	: 'function'	;
+		//terminal   IF		: 'if'		;
+		//terminal   IMPORT	: 'import'	;
+		//terminal   T_IN		: 'in'		;
+		//terminal   INITIAL	: 'initial'	;
+		//terminal   INNER		: 'inner'	;
+		//terminal   T_INPUT	: 'input'	;
+		//terminal   LOOP		: 'loop'	;
+		//terminal   MODEL		: 'model'	;
+		//terminal   T_NOT		: 'not'		;
+		//terminal   T_OUTER	: 'outer'	;
+		//terminal   OVERLOAD	: 'overload'	;
+		//terminal   T_OR		: 'or'		;
+		//terminal   T_OUTPUT	: 'output'	;
+		//terminal   PACKAGE	: 'package'	;
+		//terminal   PARAMETER	: 'parameter'	;
+		//terminal   PARTIAL	: 'partial'	;
+		//terminal   PROTECTED	: 'protected'	;
+		//terminal   PUBLIC	: 'public'	;
+		//terminal   RECORD	: 'record'	;
+		//terminal   REDECLARE	: 'redeclare'	;
+		//terminal   REPLACEABLE	: 'replaceable'	;
+		//terminal   RESULTS	: 'results'	;
+		//terminal   THEN		: 'then'	;
+		//terminal   T_TRUE	: 'true'	;
+		//terminal   TYPE		: 'type'	;
+		//terminal   WHEN		: 'when'	;
+		//terminal   WHILE		: 'while'	;
+		//terminal   WITHIN	: 'within' 	;
+		//terminal   RETURN	: 'return'  ;
+		//terminal   BREAK		: 'break'	;
+		//terminal   STREAM	: 'stream'	; / * for Modelica 3.1 stream connectors * /	
+		//
+		//  // ---------
+		//   // Operators
+		//   // ---------
+		public ParserRule getRule() { return rule; }
+
+		//"annotation" class_modification
+		public Group getGroup() { return cGroup; }
+
+		//"annotation"
+		public Keyword getAnnotationKeyword_0() { return cAnnotationKeyword_0; }
+
+		//class_modification
+		public RuleCall getClass_modificationParserRuleCall_1() { return cClass_modificationParserRuleCall_1; }
+	}
+	
+	
+	public class ClassTypeElements implements IEnumRuleAccess {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "ClassType");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cCLASSEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cCLASSClassKeyword_0_0 = (Keyword)cCLASSEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cMODELEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cMODELModelKeyword_1_0 = (Keyword)cMODELEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cRECORDEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cRECORDRecordKeyword_2_0 = (Keyword)cRECORDEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cBLOCKEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cBLOCKBlockKeyword_3_0 = (Keyword)cBLOCKEnumLiteralDeclaration_3.eContents().get(0);
+		private final EnumLiteralDeclaration cCONNECTOREnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
+		private final Keyword cCONNECTORConnectorKeyword_4_0 = (Keyword)cCONNECTOREnumLiteralDeclaration_4.eContents().get(0);
+		private final EnumLiteralDeclaration cTYPEEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
+		private final Keyword cTYPETypeKeyword_5_0 = (Keyword)cTYPEEnumLiteralDeclaration_5.eContents().get(0);
+		private final EnumLiteralDeclaration cPACKAGEEnumLiteralDeclaration_6 = (EnumLiteralDeclaration)cAlternatives.eContents().get(6);
+		private final Keyword cPACKAGEPackageKeyword_6_0 = (Keyword)cPACKAGEEnumLiteralDeclaration_6.eContents().get(0);
+		private final EnumLiteralDeclaration cFUNCTIONEnumLiteralDeclaration_7 = (EnumLiteralDeclaration)cAlternatives.eContents().get(7);
+		private final Keyword cFUNCTIONFunctionKeyword_7_0 = (Keyword)cFUNCTIONEnumLiteralDeclaration_7.eContents().get(0);
+		
+		//enum ClassType:
+		//  CLASS="class" | MODEL="model" | RECORD="record" | BLOCK="block" | CONNECTOR="connector" |
+		//  TYPE="type" | PACKAGE="package" | FUNCTION="function";
+		public EnumRule getRule() { return rule; }
+
+		//CLASS="class" | MODEL="model" | RECORD="record" | BLOCK="block" | CONNECTOR="connector" |
+		//TYPE="type" | PACKAGE="package" | FUNCTION="function"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//CLASS="class"
+		public EnumLiteralDeclaration getCLASSEnumLiteralDeclaration_0() { return cCLASSEnumLiteralDeclaration_0; }
+
+		//"class"
+		public Keyword getCLASSClassKeyword_0_0() { return cCLASSClassKeyword_0_0; }
+
+		//MODEL="model"
+		public EnumLiteralDeclaration getMODELEnumLiteralDeclaration_1() { return cMODELEnumLiteralDeclaration_1; }
+
+		//"model"
+		public Keyword getMODELModelKeyword_1_0() { return cMODELModelKeyword_1_0; }
+
+		//RECORD="record"
+		public EnumLiteralDeclaration getRECORDEnumLiteralDeclaration_2() { return cRECORDEnumLiteralDeclaration_2; }
+
+		//"record"
+		public Keyword getRECORDRecordKeyword_2_0() { return cRECORDRecordKeyword_2_0; }
+
+		//BLOCK="block"
+		public EnumLiteralDeclaration getBLOCKEnumLiteralDeclaration_3() { return cBLOCKEnumLiteralDeclaration_3; }
+
+		//"block"
+		public Keyword getBLOCKBlockKeyword_3_0() { return cBLOCKBlockKeyword_3_0; }
+
+		//CONNECTOR="connector"
+		public EnumLiteralDeclaration getCONNECTOREnumLiteralDeclaration_4() { return cCONNECTOREnumLiteralDeclaration_4; }
+
+		//"connector"
+		public Keyword getCONNECTORConnectorKeyword_4_0() { return cCONNECTORConnectorKeyword_4_0; }
+
+		//TYPE="type"
+		public EnumLiteralDeclaration getTYPEEnumLiteralDeclaration_5() { return cTYPEEnumLiteralDeclaration_5; }
+
+		//"type"
+		public Keyword getTYPETypeKeyword_5_0() { return cTYPETypeKeyword_5_0; }
+
+		//PACKAGE="package"
+		public EnumLiteralDeclaration getPACKAGEEnumLiteralDeclaration_6() { return cPACKAGEEnumLiteralDeclaration_6; }
+
+		//"package"
+		public Keyword getPACKAGEPackageKeyword_6_0() { return cPACKAGEPackageKeyword_6_0; }
+
+		//FUNCTION="function"
+		public EnumLiteralDeclaration getFUNCTIONEnumLiteralDeclaration_7() { return cFUNCTIONEnumLiteralDeclaration_7; }
+
+		//"function"
+		public Keyword getFUNCTIONFunctionKeyword_7_0() { return cFUNCTIONFunctionKeyword_7_0; }
+	}
+	
+	private StorageUnitElements pStorageUnit;
+	private EntityDefinitionElements pEntityDefinition;
+	private ClassDefinitionElements pClassDefinition;
+	private ClassTypeElements unknownRuleClassType;
+	private PartialDerivativeElements pPartialDerivative;
+	private ClassModificationElements pClassModification;
+	private ClassOverloadingElements pClassOverloading;
+	private EnumerationElements pEnumeration;
+	private Ident_listElements pIdent_list;
+	private Name_listElements pName_list;
+	private External_clauseElements pExternal_clause;
+	private External_function_callElements pExternal_function_call;
+	private ElementListElements pElementList;
+	private ElementList2Elements pElementList2;
+	private ClassElementElements pClassElement;
+	private ReplaceableElementClauseElements pReplaceableElementClause;
+	private Import_clauseElements pImport_clause;
+	private Extends_clauseElements pExtends_clause;
+	private Constraining_clauseElements pConstraining_clause;
+	private Component_clauseElements pComponent_clause;
+	private Type_prefixElements pType_prefix;
+	private Type_specifierElements pType_specifier;
+	private Component_declarationElements pComponent_declaration;
+	private ModificationElements pModification;
+	private SimpleModificationElements pSimpleModification;
+	private Class_modificationElements pClass_modification;
+	private ArgumentElements pArgument;
+	private ElementModificationElements pElementModification;
+	private ElementRedeclarationElements pElementRedeclaration;
+	private ElementReplaceableClauseElements pElementReplaceableClause;
+	private ElementComponentClauseElements pElementComponentClause;
+	private Equation_rule_clauseElements pEquation_rule_clause;
+	private Algorithm_clauseElements pAlgorithm_clause;
+	private Initial_equation_rule_clauseElements pInitial_equation_rule_clause;
+	private Initial_algorithm_clauseElements pInitial_algorithm_clause;
+	private Equation_ruleElements pEquation_rule;
+	private AlgorithmElements pAlgorithm;
+	private Assign_clause_aElements pAssign_clause_a;
+	private Equality_equation_ruleElements pEquality_equation_rule;
+	private Conditional_equation_rule_eElements pConditional_equation_rule_e;
+	private Conditional_equation_rule_aElements pConditional_equation_rule_a;
+	private For_clause_eElements pFor_clause_e;
+	private For_clause_aElements pFor_clause_a;
+	private While_clauseElements pWhile_clause;
+	private When_clause_eElements pWhen_clause_e;
+	private Else_when_eElements pElse_when_e;
+	private When_clause_aElements pWhen_clause_a;
+	private Else_when_aElements pElse_when_a;
+	private Equation_rule_elseifElements pEquation_rule_elseif;
+	private Algorithm_elseifElements pAlgorithm_elseif;
+	private Connect_clauseElements pConnect_clause;
+	private Connector_refElements pConnector_ref;
+	private Connector_ref_2Elements pConnector_ref_2;
+	private ExpressionElements pExpression;
+	private Expression_or_emptyElements pExpression_or_empty;
+	private If_expressionElements pIf_expression;
+	private Elseif_expressionElements pElseif_expression;
+	private For_indicesElements pFor_indices;
+	private For_indexElements pFor_index;
+	private Simple_expressionElements pSimple_expression;
+	private Simple_exprElements pSimple_expr;
+	private Logical_expressionElements pLogical_expression;
+	private Logical_termElements pLogical_term;
+	private Logical_factorElements pLogical_factor;
+	private RelationElements pRelation;
+	private Arithmetic_expressionElements pArithmetic_expression;
+	private Unary_arithmetic_expressionElements pUnary_arithmetic_expression;
+	private TermElements pTerm;
+	private FactorElements pFactor;
+	private PrimaryElements pPrimary;
+	private Component_reference__function_callElements pComponent_reference__function_call;
+	private Name_pathElements pName_path;
+	private Name_path_starElements pName_path_star;
+	private Component_referenceElements pComponent_reference;
+	private Function_callElements pFunction_call;
+	private Function_argumentsElements pFunction_arguments;
+	private For_or_expression_listElements pFor_or_expression_list;
+	private For_or_expression_list2Elements pFor_or_expression_list2;
+	private Named_argumentsElements pNamed_arguments;
+	private Named_arguments2Elements pNamed_arguments2;
+	private Named_argumentElements pNamed_argument;
+	private Expression_listElements pExpression_list;
+	private Expression_list2Elements pExpression_list2;
+	private Array_subscriptsElements pArray_subscripts;
+	private SubscriptElements pSubscript;
+	private CommentElements pComment;
+	private String_commentElements pString_comment;
+	private AnnotationElements pAnnotation;
+	private TerminalRule tDOT;
+	private TerminalRule tLPAR;
+	private TerminalRule tRPAR;
+	private TerminalRule tLBRACK;
+	private TerminalRule tRBRACK;
+	private TerminalRule tLBRACE;
+	private TerminalRule tRBRACE;
+	private TerminalRule tEQUALS;
+	private TerminalRule tASSIGN;
+	private TerminalRule tCOMMA;
+	private TerminalRule tCOLON;
+	private TerminalRule tSEMICOLON;
+	private TerminalRule tPLUS_EW;
+	private TerminalRule tMINUS_EW;
+	private TerminalRule tSTAR_EW;
+	private TerminalRule tSLASH_EW;
+	private TerminalRule tPOWER_EW;
+	private TerminalRule tSTAR;
+	private TerminalRule tMINUS;
+	private TerminalRule tPLUS;
+	private TerminalRule tLESS;
+	private TerminalRule tLESSEQ;
+	private TerminalRule tLESSGT;
+	private TerminalRule tGREATER;
+	private TerminalRule tGREATEREQ;
+	private TerminalRule tEQEQ;
+	private TerminalRule tPOWER;
+	private TerminalRule tSLASH;
+	private TerminalRule tUNSIGNED_REAL;
+	private TerminalRule tUNSIGNED_INTEGER;
+	private TerminalRule tIDENT;
+	
+	private final GrammarProvider grammarProvider;
+
+	private TerminalsGrammarAccess gaTerminals;
+
+	@Inject
+	public ModelicaBaseGrammarAccess(GrammarProvider grammarProvider,
+		TerminalsGrammarAccess gaTerminals) {
+		this.grammarProvider = grammarProvider;
+		this.gaTerminals = gaTerminals;
+	}
+	
+	public Grammar getGrammar() {	
+		return grammarProvider.getGrammar(this);
+	}
+	
+
+	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
+		return gaTerminals;
+	}
+
+	
+	//StorageUnit:
+	//  ("within" name_path? SEMICOLON)? ("final"? classDefinition+=ClassDefinition ";")*; 
+	//
+	/// *
+	// * Copyright (c) 2009 - currentYear, Adrian Pop [adrpo@ida.liu.se] 
+	// * All rights reserved.
+	// * /
+	//
+	//  
+	//
+	//
+	/// *------------------------------------------------------------------
+	// * PARSER RULES
+	// *------------------------------------------------------------------* /
+	public StorageUnitElements getStorageUnitAccess() {
+		return (pStorageUnit != null) ? pStorageUnit : (pStorageUnit = new StorageUnitElements());
+	}
+	
+	public ParserRule getStorageUnitRule() {
+		return getStorageUnitAccess().getRule();
+	}
+
+	//EntityDefinition:
+	//  ClassDefinition|PartialDerivative|ClassModification|ClassOverloading|Enumeration
+	//;
+	public EntityDefinitionElements getEntityDefinitionAccess() {
+		return (pEntityDefinition != null) ? pEntityDefinition : (pEntityDefinition = new EntityDefinitionElements());
+	}
+	
+	public ParserRule getEntityDefinitionRule() {
+		return getEntityDefinitionAccess().getRule();
+	}
+
+	//ClassDefinition:
+	//  encapsulated?="encapsulated"? partial?="partial"? expandable?="expandable"?
+	//  classType=ClassType (name=IDENT comment=string_comment?|"extends" IDENT modification
+	//  =class_modification? string_comment?) elemList+=ElementList (elemList+=ElementList2
+	//  |initialEquationClauses+=initial_equation_rule_clause|initialAlgorithmClauses+=
+	//  initial_algorithm_clause|equationClauses+=equation_rule_clause|algorithmClauses
+	//  +=algorithm_clause)* extClause=external_clause? "end" IDENT; 
+	//
+	//
+	//	     
+	//	 
+	//	  
+	//            
+	//    
+	//		 
+	//		  
+	//		  
+	//		  
+	//		  
+	//	
+	//	    
+	//      
+	//	//| SUBTYPEOF type_specifier
+	public ClassDefinitionElements getClassDefinitionAccess() {
+		return (pClassDefinition != null) ? pClassDefinition : (pClassDefinition = new ClassDefinitionElements());
+	}
+	
+	public ParserRule getClassDefinitionRule() {
+		return getClassDefinitionAccess().getRule();
+	}
+
+	//enum ClassType:
+	//  CLASS="class" | MODEL="model" | RECORD="record" | BLOCK="block" | CONNECTOR="connector" |
+	//  TYPE="type" | PACKAGE="package" | FUNCTION="function";
+	public ClassTypeElements getClassTypeAccess() {
+		return (unknownRuleClassType != null) ? unknownRuleClassType : (unknownRuleClassType = new ClassTypeElements());
+	}
+	
+	public EnumRule getClassTypeRule() {
+		return getClassTypeAccess().getRule();
+	}
+
+	//PartialDerivative:
+	//  "function" name=IDENT EQUALS "der" "(" name_path "," ident_list ")" comment=comment;
+	public PartialDerivativeElements getPartialDerivativeAccess() {
+		return (pPartialDerivative != null) ? pPartialDerivative : (pPartialDerivative = new PartialDerivativeElements());
+	}
+	
+	public ParserRule getPartialDerivativeRule() {
+		return getPartialDerivativeAccess().getRule();
+	}
+
+	//ClassModification:
+	//  classType=ClassType name=IDENT EQUALS type_prefix typeSpecifier=type_specifier
+	//  modification=class_modification? comment=comment;
+	public ClassModificationElements getClassModificationAccess() {
+		return (pClassModification != null) ? pClassModification : (pClassModification = new ClassModificationElements());
+	}
+	
+	public ParserRule getClassModificationRule() {
+		return getClassModificationAccess().getRule();
+	}
+
+	//ClassOverloading:
+	//  classType=ClassType name=IDENT EQUALS "overload" "(" name_list ")" comment=comment;
+	public ClassOverloadingElements getClassOverloadingAccess() {
+		return (pClassOverloading != null) ? pClassOverloading : (pClassOverloading = new ClassOverloadingElements());
+	}
+	
+	public ParserRule getClassOverloadingRule() {
+		return getClassOverloadingAccess().getRule();
+	}
+
+	//Enumeration:
+	//  classType=ClassType name=IDENT EQUALS "enumeration" LPAR (ident+=IDENT enumComments+=
+	//  comment (COMMA ident+=IDENT enumComments+=comment)*|COLON) RPAR comment=comment;
+	public EnumerationElements getEnumerationAccess() {
+		return (pEnumeration != null) ? pEnumeration : (pEnumeration = new EnumerationElements());
+	}
+	
+	public ParserRule getEnumerationRule() {
+		return getEnumerationAccess().getRule();
+	}
+
+	//ident_list returns ecore::EString:
+	//  IDENT (COMMA IDENT)*;
+	public Ident_listElements getIdent_listAccess() {
+		return (pIdent_list != null) ? pIdent_list : (pIdent_list = new Ident_listElements());
+	}
+	
+	public ParserRule getIdent_listRule() {
+		return getIdent_listAccess().getRule();
+	}
+
+	//name_list returns ecore::EString:
+	//  name_path ("," name_path)*;
+	public Name_listElements getName_listAccess() {
+		return (pName_list != null) ? pName_list : (pName_list = new Name_listElements());
+	}
+	
+	public ParserRule getName_listRule() {
+		return getName_listAccess().getRule();
+	}
+
+	//external_clause returns ExternalClause:
+	//  "external" languageSpecification=STRING? external_function_call? annotation=
+	//  annotation? SEMICOLON (extAnnotation=annotation SEMICOLON)?;
+	public External_clauseElements getExternal_clauseAccess() {
+		return (pExternal_clause != null) ? pExternal_clause : (pExternal_clause = new External_clauseElements());
+	}
+	
+	public ParserRule getExternal_clauseRule() {
+		return getExternal_clauseAccess().getRule();
+	}
+
+	//external_function_call returns ecore::EString:
+	//  (component_reference EQUALS)? IDENT LPAR expression_list? RPAR;
+	public External_function_callElements getExternal_function_callAccess() {
+		return (pExternal_function_call != null) ? pExternal_function_call : (pExternal_function_call = new External_function_callElements());
+	}
+	
+	public ParserRule getExternal_function_callRule() {
+		return getExternal_function_callAccess().getRule();
+	}
+
+	//ElementList:
+	//  ((elements+=ClassElement|annotations+=annotation) SEMICOLON)*;
+	public ElementListElements getElementListAccess() {
+		return (pElementList != null) ? pElementList : (pElementList = new ElementListElements());
+	}
+	
+	public ParserRule getElementListRule() {
+		return getElementListAccess().getRule();
+	}
+
+	//ElementList2 returns ElementList:
+	//  "public" {PublicElementList} ((elements+=ClassElement|annotations+=annotation)
+	//  SEMICOLON)*|"protected" {ProtectesElementList} ((elements+=ClassElement|
+	//  annotations+=annotation) SEMICOLON)*;
+	public ElementList2Elements getElementList2Access() {
+		return (pElementList2 != null) ? pElementList2 : (pElementList2 = new ElementList2Elements());
+	}
+	
+	public ParserRule getElementList2Rule() {
+		return getElementList2Access().getRule();
+	}
+
+	//ClassElement:
+	//  import_clause|extends_clause|"redeclare"? "final"? "inner"? "outer"? ((
+	//  ClassDefinition|component_clause)|ReplaceableElementClause); 
+	//
+	//
+	//
+	//	  
+	//	  
+	//	//| defineunit_clause
+	public ClassElementElements getClassElementAccess() {
+		return (pClassElement != null) ? pClassElement : (pClassElement = new ClassElementElements());
+	}
+	
+	public ParserRule getClassElementRule() {
+		return getClassElementAccess().getRule();
+	}
+
+	//ReplaceableElementClause:
+	//  "replaceable" entity=( ClassDefinition | component_clause ) constrain=
+	//  constraining_clause?;
+	public ReplaceableElementClauseElements getReplaceableElementClauseAccess() {
+		return (pReplaceableElementClause != null) ? pReplaceableElementClause : (pReplaceableElementClause = new ReplaceableElementClauseElements());
+	}
+	
+	public ParserRule getReplaceableElementClauseRule() {
+		return getReplaceableElementClauseAccess().getRule();
+	}
+
+	//import_clause returns ImportClause:
+	//  "import" (asName=IDENT EQUALS name=name_path|name=name_path_star) comment=comment; 
+	//
+	//    
+	//	            
+	//	
+	//
+	/// *
+	//defineunit_clause :
+	//	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+	//	;
+	// * /
+	//
+	//
+	/// *
+	// * 2.2.3 Extends
+	// * /
+	//
+	//// Note that this is a minor modification of the standard by
+	//// allowing the comment.
+	public Import_clauseElements getImport_clauseAccess() {
+		return (pImport_clause != null) ? pImport_clause : (pImport_clause = new Import_clauseElements());
+	}
+	
+	public ParserRule getImport_clauseRule() {
+		return getImport_clauseAccess().getRule();
+	}
+
+	//extends_clause returns ExtendsClause:
+	//  "extends" baseClass=name_path modification=class_modification? annotation=
+	//  annotation?; 
+	//
+	/// *
+	//defineunit_clause :
+	//	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+	//	;
+	// * /
+	//
+	//
+	/// *
+	// * 2.2.3 Extends
+	// * /
+	//
+	//// Note that this is a minor modification of the standard by
+	//// allowing the comment.
+	public Extends_clauseElements getExtends_clauseAccess() {
+		return (pExtends_clause != null) ? pExtends_clause : (pExtends_clause = new Extends_clauseElements());
+	}
+	
+	public ParserRule getExtends_clauseRule() {
+		return getExtends_clauseAccess().getRule();
+	}
+
+	//constraining_clause returns ConstrainingClause:
+	//  ("extends" name=name_path modification=class_modification?|"constrainedby" name=
+	//  name_path modification=class_modification?) comment=comment; 
+	//
+	//    
+	//	      
+	//	        
+	//	  
+	//	
+	//
+	/// *
+	// * 2.2.4 Component clause
+	// * /
+	public Constraining_clauseElements getConstraining_clauseAccess() {
+		return (pConstraining_clause != null) ? pConstraining_clause : (pConstraining_clause = new Constraining_clauseElements());
+	}
+	
+	public ParserRule getConstraining_clauseRule() {
+		return getConstraining_clauseAccess().getRule();
+	}
+
+	//component_clause returns ComponentClause:
+	//  typePrefix=type_prefix typeSpecifier=type_specifier declarations+=
+	//  component_declaration (COMMA declarations+=component_declaration)*; 
+	//
+	/// *
+	// * 2.2.4 Component clause
+	// * /
+	public Component_clauseElements getComponent_clauseAccess() {
+		return (pComponent_clause != null) ? pComponent_clause : (pComponent_clause = new Component_clauseElements());
+	}
+	
+	public ParserRule getComponent_clauseRule() {
+		return getComponent_clauseAccess().getRule();
+	}
+
+	//type_prefix returns ecore::EString:
+	//  ("flow"|"stream")? ("discrete"|"parameter"|"constant")? ("input"|"output")?;
+	public Type_prefixElements getType_prefixAccess() {
+		return (pType_prefix != null) ? pType_prefix : (pType_prefix = new Type_prefixElements());
+	}
+	
+	public ParserRule getType_prefixRule() {
+		return getType_prefixAccess().getRule();
+	}
+
+	//type_specifier returns TypeSpecifier:
+	//  name=name_path subscripts=array_subscripts?; 
+	//
+	//    
+	//	
+	//	// TODO MML expr?
+	//	 //((LESS type_specifier (COMMA type_specifier)* GREATER))?
+	public Type_specifierElements getType_specifierAccess() {
+		return (pType_specifier != null) ? pType_specifier : (pType_specifier = new Type_specifierElements());
+	}
+	
+	public ParserRule getType_specifierRule() {
+		return getType_specifierAccess().getRule();
+	}
+
+	//component_declaration returns ComponentDeclaration:
+	//  IDENT subscripts=array_subscripts? modification=modification? ("if" condition=
+	//  expression)? comment=comment; 
+	//
+	//    
+	//	          
+	//	
+	//
+	/// *
+	// * 2.2.5 Modification
+	// * /
+	public Component_declarationElements getComponent_declarationAccess() {
+		return (pComponent_declaration != null) ? pComponent_declaration : (pComponent_declaration = new Component_declarationElements());
+	}
+	
+	public ParserRule getComponent_declarationRule() {
+		return getComponent_declarationAccess().getRule();
+	}
+
+	//modification returns Modification:
+	//  class_modification|SimpleModification; 
+	//
+	/// *
+	// * 2.2.5 Modification
+	// * /
+	public ModificationElements getModificationAccess() {
+		return (pModification != null) ? pModification : (pModification = new ModificationElements());
+	}
+	
+	public ParserRule getModificationRule() {
+		return getModificationAccess().getRule();
+	}
+
+	//SimpleModification:
+	//  EQUALS expression=expression|ASSIGN expression=expression;
+	public SimpleModificationElements getSimpleModificationAccess() {
+		return (pSimpleModification != null) ? pSimpleModification : (pSimpleModification = new SimpleModificationElements());
+	}
+	
+	public ParserRule getSimpleModificationRule() {
+		return getSimpleModificationAccess().getRule();
+	}
+
+	//class_modification returns ClassModification:
+	//  LPAR (arguments+=argument (COMMA arguments+=argument)*)? RPAR (EQUALS expression=
+	//  expression)?;
+	public Class_modificationElements getClass_modificationAccess() {
+		return (pClass_modification != null) ? pClass_modification : (pClass_modification = new Class_modificationElements());
+	}
+	
+	public ParserRule getClass_modificationRule() {
+		return getClass_modificationAccess().getRule();
+	}
+
+	//argument:
+	//  "each"? "final"? (ElementModification|ElementReplaceableClause)|
+	//  ElementRedeclaration;
+	public ArgumentElements getArgumentAccess() {
+		return (pArgument != null) ? pArgument : (pArgument = new ArgumentElements());
+	}
+	
+	public ParserRule getArgumentRule() {
+		return getArgumentAccess().getRule();
+	}
+
+	//ElementModification:
+	//  componetRef=component_reference modification=modification? comment=string_comment?
+	//;
+	public ElementModificationElements getElementModificationAccess() {
+		return (pElementModification != null) ? pElementModification : (pElementModification = new ElementModificationElements());
+	}
+	
+	public ParserRule getElementModificationRule() {
+		return getElementModificationAccess().getRule();
+	}
+
+	//ElementRedeclaration:
+	//  "redeclare" "each"? "final"? ((ClassDefinition|ElementComponentClause)|
+	//  ElementReplaceableClause);
+	public ElementRedeclarationElements getElementRedeclarationAccess() {
+		return (pElementRedeclaration != null) ? pElementRedeclaration : (pElementRedeclaration = new ElementRedeclarationElements());
+	}
+	
+	public ParserRule getElementRedeclarationRule() {
+		return getElementRedeclarationAccess().getRule();
+	}
+
+	//ElementReplaceableClause:
+	//  "replaceable" element=( ClassDefinition | ElementComponentClause ) constraint=
+	//  constraining_clause?;
+	public ElementReplaceableClauseElements getElementReplaceableClauseAccess() {
+		return (pElementReplaceableClause != null) ? pElementReplaceableClause : (pElementReplaceableClause = new ElementReplaceableClauseElements());
+	}
+	
+	public ParserRule getElementReplaceableClauseRule() {
+		return getElementReplaceableClauseAccess().getRule();
+	}
+
+	//ElementComponentClause:
+	//  typePrefix=type_prefix typeSpecifier=type_specifier IDENT subscripts=
+	//  array_subscripts? modification=modification? comment=comment; 
+	//	
+	//  
+	//	       
+	//	  
+	//	
+	//
+	//
+	/// *
+	// * 2.2.6 Equations
+	// * /
+	public ElementComponentClauseElements getElementComponentClauseAccess() {
+		return (pElementComponentClause != null) ? pElementComponentClause : (pElementComponentClause = new ElementComponentClauseElements());
+	}
+	
+	public ParserRule getElementComponentClauseRule() {
+		return getElementComponentClauseAccess().getRule();
+	}
+
+	//equation_rule_clause returns EquationClause:
+	//  "equation" (equationRules+=equation_rule SEMICOLON|annotations+=annotation
+	//  SEMICOLON)+; 
+	//
+	//
+	/// *
+	// * 2.2.6 Equations
+	// * /
+	public Equation_rule_clauseElements getEquation_rule_clauseAccess() {
+		return (pEquation_rule_clause != null) ? pEquation_rule_clause : (pEquation_rule_clause = new Equation_rule_clauseElements());
+	}
+	
+	public ParserRule getEquation_rule_clauseRule() {
+		return getEquation_rule_clauseAccess().getRule();
+	}
+
+	//algorithm_clause:
+	//  "algorithm" (algorithmRules+=algorithm SEMICOLON|annotations+=annotation SEMICOLON)
+	//  +;
+	public Algorithm_clauseElements getAlgorithm_clauseAccess() {
+		return (pAlgorithm_clause != null) ? pAlgorithm_clause : (pAlgorithm_clause = new Algorithm_clauseElements());
+	}
+	
+	public ParserRule getAlgorithm_clauseRule() {
+		return getAlgorithm_clauseAccess().getRule();
+	}
+
+	//initial_equation_rule_clause:
+	//  "initial" equation_rule_clause;
+	public Initial_equation_rule_clauseElements getInitial_equation_rule_clauseAccess() {
+		return (pInitial_equation_rule_clause != null) ? pInitial_equation_rule_clause : (pInitial_equation_rule_clause = new Initial_equation_rule_clauseElements());
+	}
+	
+	public ParserRule getInitial_equation_rule_clauseRule() {
+		return getInitial_equation_rule_clauseAccess().getRule();
+	}
+
+	//initial_algorithm_clause:
+	//  "initial" algorithm_clause;
+	public Initial_algorithm_clauseElements getInitial_algorithm_clauseAccess() {
+		return (pInitial_algorithm_clause != null) ? pInitial_algorithm_clause : (pInitial_algorithm_clause = new Initial_algorithm_clauseElements());
+	}
+	
+	public ParserRule getInitial_algorithm_clauseRule() {
+		return getInitial_algorithm_clauseAccess().getRule();
+	}
+
+	//equation_rule:
+	//  (equality_equation_rule|conditional_equation_rule_e|for_clause_e|connect_clause|
+	//  when_clause_e) comment=comment; 
+	//
+	//  
+	//	  	 
+	//	  
+	//	  
+	//	  
+	//	     
+	//	//| FAILURE LPAR equation_rule RPAR
+	//	 //| EQUALITY LPAR equation_rule RPAR
+	public Equation_ruleElements getEquation_ruleAccess() {
+		return (pEquation_rule != null) ? pEquation_rule : (pEquation_rule = new Equation_ruleElements());
+	}
+	
+	public ParserRule getEquation_ruleRule() {
+		return getEquation_ruleAccess().getRule();
+	}
+
+	//algorithm:
+	//  (assign_clause_a|conditional_equation_rule_a|for_clause_a|while_clause|
+	//  when_clause_a|"break"|"return") comment=comment; 
+	//
+	//  
+	//	  
+	//	  
+	//	  
+	//	  
+	//	  
+	//	  
+	//	  
+	//	//| FAILURE LPAR algorithm RPAR
+	//	 //| EQUALITY LPAR algorithm RPAR
+	public AlgorithmElements getAlgorithmAccess() {
+		return (pAlgorithm != null) ? pAlgorithm : (pAlgorithm = new AlgorithmElements());
+	}
+	
+	public ParserRule getAlgorithmRule() {
+		return getAlgorithmAccess().getRule();
+	}
+
+	//assign_clause_a returns ecore::EString:
+	//  simple_expression (ASSIGN expression|EQUALS expression)?;
+	public Assign_clause_aElements getAssign_clause_aAccess() {
+		return (pAssign_clause_a != null) ? pAssign_clause_a : (pAssign_clause_a = new Assign_clause_aElements());
+	}
+	
+	public ParserRule getAssign_clause_aRule() {
+		return getAssign_clause_aAccess().getRule();
+	}
+
+	//equality_equation_rule returns ecore::EString:
+	//  simple_expression (EQUALS expression)?;
+	public Equality_equation_ruleElements getEquality_equation_ruleAccess() {
+		return (pEquality_equation_rule != null) ? pEquality_equation_rule : (pEquality_equation_rule = new Equality_equation_ruleElements());
+	}
+	
+	public ParserRule getEquality_equation_ruleRule() {
+		return getEquality_equation_ruleAccess().getRule();
+	}
+
+	//conditional_equation_rule_e returns ConditionalEquationRule:
+	//  "if" expression "then" (thenEquationClauses+=equation_rule SEMICOLON)* elseifClauses
+	//  +=equation_rule_elseif* ("else" (elseEquationClauses+=equation_rule SEMICOLON)*)?
+	//  "end" "if";
+	public Conditional_equation_rule_eElements getConditional_equation_rule_eAccess() {
+		return (pConditional_equation_rule_e != null) ? pConditional_equation_rule_e : (pConditional_equation_rule_e = new Conditional_equation_rule_eElements());
+	}
+	
+	public ParserRule getConditional_equation_rule_eRule() {
+		return getConditional_equation_rule_eAccess().getRule();
+	}
+
+	//conditional_equation_rule_a returns ConditionAlgorithmRule:
+	//  "if" condition=expression "then" (thenAlgorithmClauses+=algorithm SEMICOLON)*
+	//  elseifClauses+=algorithm_elseif* ("else" (elseAlgotithmClauses+=algorithm SEMICOLON
+	//  )*)? "end" "if";
+	public Conditional_equation_rule_aElements getConditional_equation_rule_aAccess() {
+		return (pConditional_equation_rule_a != null) ? pConditional_equation_rule_a : (pConditional_equation_rule_a = new Conditional_equation_rule_aElements());
+	}
+	
+	public ParserRule getConditional_equation_rule_aRule() {
+		return getConditional_equation_rule_aAccess().getRule();
+	}
+
+	//for_clause_e returns ForEquationClause:
+	//  "for" forIndices=for_indices "loop" (equationClauses+=equation_rule SEMICOLON)* "end"
+	//  "for";
+	public For_clause_eElements getFor_clause_eAccess() {
+		return (pFor_clause_e != null) ? pFor_clause_e : (pFor_clause_e = new For_clause_eElements());
+	}
+	
+	public ParserRule getFor_clause_eRule() {
+		return getFor_clause_eAccess().getRule();
+	}
+
+	//for_clause_a returns ForAlgorithmClause:
+	//  "for" forIndices=for_indices "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+	//  "for";
+	public For_clause_aElements getFor_clause_aAccess() {
+		return (pFor_clause_a != null) ? pFor_clause_a : (pFor_clause_a = new For_clause_aElements());
+	}
+	
+	public ParserRule getFor_clause_aRule() {
+		return getFor_clause_aAccess().getRule();
+	}
+
+	//while_clause returns WhileClause:
+	//  "while" condition=expression "loop" (algorithmClauses+=algorithm SEMICOLON)* "end"
+	//  "while";
+	public While_clauseElements getWhile_clauseAccess() {
+		return (pWhile_clause != null) ? pWhile_clause : (pWhile_clause = new While_clauseElements());
+	}
+	
+	public ParserRule getWhile_clauseRule() {
+		return getWhile_clauseAccess().getRule();
+	}
+
+	//when_clause_e:
+	//  "when" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+	//  elseWhenClauses+=else_when_e* "end" "when";
+	public When_clause_eElements getWhen_clause_eAccess() {
+		return (pWhen_clause_e != null) ? pWhen_clause_e : (pWhen_clause_e = new When_clause_eElements());
+	}
+	
+	public ParserRule getWhen_clause_eRule() {
+		return getWhen_clause_eAccess().getRule();
+	}
+
+	//else_when_e:
+	//  "elsewhen" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON
+	//  )*;
+	public Else_when_eElements getElse_when_eAccess() {
+		return (pElse_when_e != null) ? pElse_when_e : (pElse_when_e = new Else_when_eElements());
+	}
+	
+	public ParserRule getElse_when_eRule() {
+		return getElse_when_eAccess().getRule();
+	}
+
+	//when_clause_a:
+	//  "when" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+	//  elseWhenClauses+=else_when_a* "end" "when";
+	public When_clause_aElements getWhen_clause_aAccess() {
+		return (pWhen_clause_a != null) ? pWhen_clause_a : (pWhen_clause_a = new When_clause_aElements());
+	}
+	
+	public ParserRule getWhen_clause_aRule() {
+		return getWhen_clause_aAccess().getRule();
+	}
+
+	//else_when_a:
+	//  "elsewhen" condition=expression "then" (thenAlgorithmClauses+=equation_rule
+	//  SEMICOLON)*;
+	public Else_when_aElements getElse_when_aAccess() {
+		return (pElse_when_a != null) ? pElse_when_a : (pElse_when_a = new Else_when_aElements());
+	}
+	
+	public ParserRule getElse_when_aRule() {
+		return getElse_when_aAccess().getRule();
+	}
+
+	//equation_rule_elseif:
+	//  "elseif" condition=expression "then" (thenEquationClauses+=equation_rule SEMICOLON)*
+	//;
+	public Equation_rule_elseifElements getEquation_rule_elseifAccess() {
+		return (pEquation_rule_elseif != null) ? pEquation_rule_elseif : (pEquation_rule_elseif = new Equation_rule_elseifElements());
+	}
+	
+	public ParserRule getEquation_rule_elseifRule() {
+		return getEquation_rule_elseifAccess().getRule();
+	}
+
+	//algorithm_elseif:
+	//  "elseif" condition=expression "then" (thenAlgorithmClauses+=equation_rule SEMICOLON)
+	//  *;
+	public Algorithm_elseifElements getAlgorithm_elseifAccess() {
+		return (pAlgorithm_elseif != null) ? pAlgorithm_elseif : (pAlgorithm_elseif = new Algorithm_elseifElements());
+	}
+	
+	public ParserRule getAlgorithm_elseifRule() {
+		return getAlgorithm_elseifAccess().getRule();
+	}
+
+	//connect_clause returns ecore::EString:
+	//  "connect" LPAR connector_ref COMMA connector_ref RPAR;
+	public Connect_clauseElements getConnect_clauseAccess() {
+		return (pConnect_clause != null) ? pConnect_clause : (pConnect_clause = new Connect_clauseElements());
+	}
+	
+	public ParserRule getConnect_clauseRule() {
+		return getConnect_clauseAccess().getRule();
+	}
+
+	//connector_ref returns ecore::EString:
+	//  IDENT array_subscripts? (DOT connector_ref_2)?;
+	public Connector_refElements getConnector_refAccess() {
+		return (pConnector_ref != null) ? pConnector_ref : (pConnector_ref = new Connector_refElements());
+	}
+	
+	public ParserRule getConnector_refRule() {
+		return getConnector_refAccess().getRule();
+	}
+
+	//connector_ref_2 returns ecore::EString:
+	//  IDENT array_subscripts?; 
+	//
+	//  
+	//	      
+	//	
+	//
+	/// *
+	// * 2.2.7 Expressions
+	// * /
+	public Connector_ref_2Elements getConnector_ref_2Access() {
+		return (pConnector_ref_2 != null) ? pConnector_ref_2 : (pConnector_ref_2 = new Connector_ref_2Elements());
+	}
+	
+	public ParserRule getConnector_ref_2Rule() {
+		return getConnector_ref_2Access().getRule();
+	}
+
+	//expression returns ecore::EString:
+	//  if_expression|simple_expression; 
+	//
+	/// *
+	// * 2.2.7 Expressions
+	// * /
+	//  
+	//	  
+	//	  
+	//	//| code_expression
+	//	 / *| (MATCHCONTINUE expression_or_empty
+	//	   local_clause
+	//	   cases
+	//	   T_END MATCHCONTINUE)
+	//	| (MATCH expression_or_empty
+	//	   local_clause
+	//	   cases
+	//	   T_END MATCH)
+	//	   * /
+	public ExpressionElements getExpressionAccess() {
+		return (pExpression != null) ? pExpression : (pExpression = new ExpressionElements());
+	}
+	
+	public ParserRule getExpressionRule() {
+		return getExpressionAccess().getRule();
+	}
+
+	//expression_or_empty returns ecore::EString:
+	//  expression|LPAR RPAR; 
+	//
+	//  
+	//	
+	//	    
+	//	
+	//
+	/// *
+	//// The element_list is now modified
+	//local_clause:
+	//	(LOCAL element_list)?
+	//	;
+	//
+	//cases:
+	//	(onecase)+ (ELSE string_comment local_clause (EQUATION equation_rule_list_then)?
+	//	THEN expression_or_empty SEMICOLON)?
+	//	;
+	//
+	//onecase:
+	//	(CASE pattern string_comment local_clause (EQUATION equation_rule_list_then)?
+	//	THEN expression_or_empty SEMICOLON)
+	//	;
+	//
+	//pattern:
+	//	expression_or_empty
+	//	;
+	// * /
+	public Expression_or_emptyElements getExpression_or_emptyAccess() {
+		return (pExpression_or_empty != null) ? pExpression_or_empty : (pExpression_or_empty = new Expression_or_emptyElements());
+	}
+	
+	public ParserRule getExpression_or_emptyRule() {
+		return getExpression_or_emptyAccess().getRule();
+	}
+
+	//if_expression returns ecore::EString:
+	//  "if" expression "then" expression elseif_expression* "else" expression; 
+	//
+	/// *
+	//// The element_list is now modified
+	//local_clause:
+	//	(LOCAL element_list)?
+	//	;
+	//
+	//cases:
+	//	(onecase)+ (ELSE string_comment local_clause (EQUATION equation_rule_list_then)?
+	//	THEN expression_or_empty SEMICOLON)?
+	//	;
+	//
+	//onecase:
+	//	(CASE pattern string_comment local_clause (EQUATION equation_rule_list_then)?
+	//	THEN expression_or_empty SEMICOLON)
+	//	;
+	//
+	//pattern:
+	//	expression_or_empty
+	//	;
+	// * /
+	public If_expressionElements getIf_expressionAccess() {
+		return (pIf_expression != null) ? pIf_expression : (pIf_expression = new If_expressionElements());
+	}
+	
+	public ParserRule getIf_expressionRule() {
+		return getIf_expressionAccess().getRule();
+	}
+
+	//elseif_expression returns ecore::EString:
+	//  "elseif" expression "then" expression;
+	public Elseif_expressionElements getElseif_expressionAccess() {
+		return (pElseif_expression != null) ? pElseif_expression : (pElseif_expression = new Elseif_expressionElements());
+	}
+	
+	public ParserRule getElseif_expressionRule() {
+		return getElseif_expressionAccess().getRule();
+	}
+
+	//for_indices returns ecore::EString:
+	//  for_index (COMMA for_index)*;
+	public For_indicesElements getFor_indicesAccess() {
+		return (pFor_indices != null) ? pFor_indices : (pFor_indices = new For_indicesElements());
+	}
+	
+	public ParserRule getFor_indicesRule() {
+		return getFor_indicesAccess().getRule();
+	}
+
+	//for_index returns ecore::EString:
+	//  IDENT ("in" expression)?;
+	public For_indexElements getFor_indexAccess() {
+		return (pFor_index != null) ? pFor_index : (pFor_index = new For_indexElements());
+	}
+	
+	public ParserRule getFor_indexRule() {
+		return getFor_indexAccess().getRule();
+	}
+
+	//simple_expression returns ecore::EString:
+	//  simple_expr; 
+	//
+	//  
+	//	   
+	//	//(COLONCOLON simple_expr)*
+	//	 //| IDENT AS simple_expression
+	public Simple_expressionElements getSimple_expressionAccess() {
+		return (pSimple_expression != null) ? pSimple_expression : (pSimple_expression = new Simple_expressionElements());
+	}
+	
+	public ParserRule getSimple_expressionRule() {
+		return getSimple_expressionAccess().getRule();
+	}
+
+	//simple_expr returns ecore::EString:
+	//  logical_expression (COLON logical_expression (COLON logical_expression)?)?; 
+	//
+	//  
+	//	                
+	//	
+	//
+	/// * Code quotation mechanism * / 
+	/// *
+	//code_expression  :
+	//	CODE LPAR ((expression RPAR)=> e=expression | m=modification | el=element (SEMICOLON)?
+	//	| eq=code_equation_rule_clause | ieq=code_initial_equation_rule_clause
+	//	| alg=code_algorithm_clause | ialg=code_initial_algorithm_clause
+	//	)  RPAR
+	//	;
+	//
+	//code_equation_rule_clause :
+	//	( EQUATION ( equation_rule SEMICOLON | annotation SEMICOLON )*  )
+	//	;
+	//
+	//code_initial_equation_rule_clause :
+	//	{ LA(2)==EQUATION }?
+	//	INITIAL ec=code_equation_rule_clause 
+	//	;
+	//
+	//code_algorithm_clause :
+	//	'algorithm' (algorithm SEMICOLON | annotation SEMICOLON)*
+	//	;
+	//
+	//code_initial_algorithm_clause :
+	//	{ LA(2) == 'algorithm' }?
+	//	INITIAL 'algorithm'
+	//	( algorithm SEMICOLON | annotation SEMICOLON )* 
+	//	;
+	// * /
+	/// * End Code quotation mechanism * /
+	public Simple_exprElements getSimple_exprAccess() {
+		return (pSimple_expr != null) ? pSimple_expr : (pSimple_expr = new Simple_exprElements());
+	}
+	
+	public ParserRule getSimple_exprRule() {
+		return getSimple_exprAccess().getRule();
+	}
+
+	//logical_expression returns ecore::EString:
+	//  logical_term ("or" logical_term)*; 
+	//
+	/// * Code quotation mechanism * / 
+	/// *
+	//code_expression  :
+	//	CODE LPAR ((expression RPAR)=> e=expression | m=modification | el=element (SEMICOLON)?
+	//	| eq=code_equation_rule_clause | ieq=code_initial_equation_rule_clause
+	//	| alg=code_algorithm_clause | ialg=code_initial_algorithm_clause
+	//	)  RPAR
+	//	;
+	//
+	//code_equation_rule_clause :
+	//	( EQUATION ( equation_rule SEMICOLON | annotation SEMICOLON )*  )
+	//	;
+	//
+	//code_initial_equation_rule_clause :
+	//	{ LA(2)==EQUATION }?
+	//	INITIAL ec=code_equation_rule_clause 
+	//	;
+	//
+	//code_algorithm_clause :
+	//	'algorithm' (algorithm SEMICOLON | annotation SEMICOLON)*
+	//	;
+	//
+	//code_initial_algorithm_clause :
+	//	{ LA(2) == 'algorithm' }?
+	//	INITIAL 'algorithm'
+	//	( algorithm SEMICOLON | annotation SEMICOLON )* 
+	//	;
+	// * /
+	/// * End Code quotation mechanism * /
+	public Logical_expressionElements getLogical_expressionAccess() {
+		return (pLogical_expression != null) ? pLogical_expression : (pLogical_expression = new Logical_expressionElements());
+	}
+	
+	public ParserRule getLogical_expressionRule() {
+		return getLogical_expressionAccess().getRule();
+	}
+
+	//logical_term returns ecore::EString:
+	//  logical_factor ("and" logical_factor)*;
+	public Logical_termElements getLogical_termAccess() {
+		return (pLogical_term != null) ? pLogical_term : (pLogical_term = new Logical_termElements());
+	}
+	
+	public ParserRule getLogical_termRule() {
+		return getLogical_termAccess().getRule();
+	}
+
+	//logical_factor returns ecore::EString:
+	//  "not"? relation;
+	public Logical_factorElements getLogical_factorAccess() {
+		return (pLogical_factor != null) ? pLogical_factor : (pLogical_factor = new Logical_factorElements());
+	}
+	
+	public ParserRule getLogical_factorRule() {
+		return getLogical_factorAccess().getRule();
+	}
+
+	//relation returns ecore::EString:
+	//  arithmetic_expression ((LESS|LESSEQ|GREATER|GREATEREQ|EQEQ|LESSGT)
+	//  arithmetic_expression)?;
+	public RelationElements getRelationAccess() {
+		return (pRelation != null) ? pRelation : (pRelation = new RelationElements());
+	}
+	
+	public ParserRule getRelationRule() {
+		return getRelationAccess().getRule();
+	}
+
+	//arithmetic_expression returns ecore::EString:
+	//  unary_arithmetic_expression ((PLUS|MINUS|PLUS_EW|MINUS_EW) term)*;
+	public Arithmetic_expressionElements getArithmetic_expressionAccess() {
+		return (pArithmetic_expression != null) ? pArithmetic_expression : (pArithmetic_expression = new Arithmetic_expressionElements());
+	}
+	
+	public ParserRule getArithmetic_expressionRule() {
+		return getArithmetic_expressionAccess().getRule();
+	}
+
+	//unary_arithmetic_expression returns ecore::EString:
+	//  PLUS term|MINUS term|PLUS_EW term|MINUS_EW term|term;
+	public Unary_arithmetic_expressionElements getUnary_arithmetic_expressionAccess() {
+		return (pUnary_arithmetic_expression != null) ? pUnary_arithmetic_expression : (pUnary_arithmetic_expression = new Unary_arithmetic_expressionElements());
+	}
+	
+	public ParserRule getUnary_arithmetic_expressionRule() {
+		return getUnary_arithmetic_expressionAccess().getRule();
+	}
+
+	//term returns ecore::EString:
+	//  factor ((STAR|SLASH|STAR_EW|SLASH_EW) factor)*;
+	public TermElements getTermAccess() {
+		return (pTerm != null) ? pTerm : (pTerm = new TermElements());
+	}
+	
+	public ParserRule getTermRule() {
+		return getTermAccess().getRule();
+	}
+
+	//factor returns ecore::EString:
+	//  primary ((POWER|POWER_EW) primary)?;
+	public FactorElements getFactorAccess() {
+		return (pFactor != null) ? pFactor : (pFactor = new FactorElements());
+	}
+	
+	public ParserRule getFactorRule() {
+		return getFactorAccess().getRule();
+	}
+
+	//primary returns ecore::EString:
+	//  UNSIGNED_INTEGER|UNSIGNED_REAL|STRING|"false"|"true"|
+	//  component_reference__function_call|"der" function_call|LPAR expression_list RPAR|
+	//  LBRACK expression_list (SEMICOLON expression_list)* RBRACK|LBRACE
+	//  for_or_expression_list RBRACE|"end";
+	public PrimaryElements getPrimaryAccess() {
+		return (pPrimary != null) ? pPrimary : (pPrimary = new PrimaryElements());
+	}
+	
+	public ParserRule getPrimaryRule() {
+		return getPrimaryAccess().getRule();
+	}
+
+	//component_reference__function_call returns ecore::EString:
+	//  component_reference function_call?|"initial" LPAR RPAR;
+	public Component_reference__function_callElements getComponent_reference__function_callAccess() {
+		return (pComponent_reference__function_call != null) ? pComponent_reference__function_call : (pComponent_reference__function_call = new Component_reference__function_callElements());
+	}
+	
+	public ParserRule getComponent_reference__function_callRule() {
+		return getComponent_reference__function_callAccess().getRule();
+	}
+
+	//name_path returns ecore::EString:
+	//  IDENT|IDENT DOT name_path; 
+	//
+	//  
+	//	//{ LA(2)!=DOT }?
+	public Name_pathElements getName_pathAccess() {
+		return (pName_path != null) ? pName_path : (pName_path = new Name_pathElements());
+	}
+	
+	public ParserRule getName_pathRule() {
+		return getName_pathAccess().getRule();
+	}
+
+	//name_path_star returns ecore::EString:
+	//  IDENT STAR_EW?|IDENT DOT name_path_star; 
+	//
+	// 
+	//	
+	//	//{ LA(2) != DOT }?
+	public Name_path_starElements getName_path_starAccess() {
+		return (pName_path_star != null) ? pName_path_star : (pName_path_star = new Name_path_starElements());
+	}
+	
+	public ParserRule getName_path_starRule() {
+		return getName_path_starAccess().getRule();
+	}
+
+	//component_reference returns ecore::EString:
+	//  IDENT array_subscripts? (DOT component_reference)?; 
+	//
+	//  
+	//	                
+	//	//| WILD
+	public Component_referenceElements getComponent_referenceAccess() {
+		return (pComponent_reference != null) ? pComponent_reference : (pComponent_reference = new Component_referenceElements());
+	}
+	
+	public ParserRule getComponent_referenceRule() {
+		return getComponent_referenceAccess().getRule();
+	}
+
+	//function_call returns ecore::EString:
+	//  LPAR function_arguments RPAR;
+	public Function_callElements getFunction_callAccess() {
+		return (pFunction_call != null) ? pFunction_call : (pFunction_call = new Function_callElements());
+	}
+	
+	public ParserRule getFunction_callRule() {
+		return getFunction_callAccess().getRule();
+	}
+
+	//function_arguments returns ecore::EString:
+	//  for_or_expression_list? named_arguments?;
+	public Function_argumentsElements getFunction_argumentsAccess() {
+		return (pFunction_arguments != null) ? pFunction_arguments : (pFunction_arguments = new Function_argumentsElements());
+	}
+	
+	public ParserRule getFunction_argumentsRule() {
+		return getFunction_argumentsAccess().getRule();
+	}
+
+	//for_or_expression_list returns ecore::EString:
+	//  expression (COMMA for_or_expression_list2?|"for" for_indices)?; 
+	//
+	//  
+	//	//({LA(1)==IDENT && LA(2) == EQUALS || LA(1) == RPAR || LA(1) == RBRACE}?|
+	public For_or_expression_listElements getFor_or_expression_listAccess() {
+		return (pFor_or_expression_list != null) ? pFor_or_expression_list : (pFor_or_expression_list = new For_or_expression_listElements());
+	}
+	
+	public ParserRule getFor_or_expression_listRule() {
+		return getFor_or_expression_listAccess().getRule();
+	}
+
+	//for_or_expression_list2 returns ecore::EString:
+	//  expression (COMMA for_or_expression_list2)?; 
+	//
+	//  
+	//	// {LA(2) == EQUALS}? |
+	public For_or_expression_list2Elements getFor_or_expression_list2Access() {
+		return (pFor_or_expression_list2 != null) ? pFor_or_expression_list2 : (pFor_or_expression_list2 = new For_or_expression_list2Elements());
+	}
+	
+	public ParserRule getFor_or_expression_list2Rule() {
+		return getFor_or_expression_list2Access().getRule();
+	}
+
+	//named_arguments returns ecore::EString:
+	//  named_arguments2;
+	public Named_argumentsElements getNamed_argumentsAccess() {
+		return (pNamed_arguments != null) ? pNamed_arguments : (pNamed_arguments = new Named_argumentsElements());
+	}
+	
+	public ParserRule getNamed_argumentsRule() {
+		return getNamed_argumentsAccess().getRule();
+	}
+
+	//named_arguments2 returns ecore::EString:
+	//  named_argument (COMMA named_argument)*;
+	public Named_arguments2Elements getNamed_arguments2Access() {
+		return (pNamed_arguments2 != null) ? pNamed_arguments2 : (pNamed_arguments2 = new Named_arguments2Elements());
+	}
+	
+	public ParserRule getNamed_arguments2Rule() {
+		return getNamed_arguments2Access().getRule();
+	}
+
+	//named_argument returns ecore::EString:
+	//  IDENT EQUALS expression;
+	public Named_argumentElements getNamed_argumentAccess() {
+		return (pNamed_argument != null) ? pNamed_argument : (pNamed_argument = new Named_argumentElements());
+	}
+	
+	public ParserRule getNamed_argumentRule() {
+		return getNamed_argumentAccess().getRule();
+	}
+
+	//expression_list returns ecore::EString:
+	//  expression_list2;
+	public Expression_listElements getExpression_listAccess() {
+		return (pExpression_list != null) ? pExpression_list : (pExpression_list = new Expression_listElements());
+	}
+	
+	public ParserRule getExpression_listRule() {
+		return getExpression_listAccess().getRule();
+	}
+
+	//expression_list2 returns ecore::EString:
+	//  expression (COMMA expression_list2)?;
+	public Expression_list2Elements getExpression_list2Access() {
+		return (pExpression_list2 != null) ? pExpression_list2 : (pExpression_list2 = new Expression_list2Elements());
+	}
+	
+	public ParserRule getExpression_list2Rule() {
+		return getExpression_list2Access().getRule();
+	}
+
+	//array_subscripts returns ecore::EString:
+	//  LBRACK subscript (COMMA subscript)* RBRACK;
+	public Array_subscriptsElements getArray_subscriptsAccess() {
+		return (pArray_subscripts != null) ? pArray_subscripts : (pArray_subscripts = new Array_subscriptsElements());
+	}
+	
+	public ParserRule getArray_subscriptsRule() {
+		return getArray_subscriptsAccess().getRule();
+	}
+
+	//subscript returns ecore::EString:
+	//  expression|COLON;
+	public SubscriptElements getSubscriptAccess() {
+		return (pSubscript != null) ? pSubscript : (pSubscript = new SubscriptElements());
+	}
+	
+	public ParserRule getSubscriptRule() {
+		return getSubscriptAccess().getRule();
+	}
+
+	//comment returns Comment:
+	//  string=string_comment? annotation=annotation?;
+	public CommentElements getCommentAccess() {
+		return (pComment != null) ? pComment : (pComment = new CommentElements());
+	}
+	
+	public ParserRule getCommentRule() {
+		return getCommentAccess().getRule();
+	}
+
+	//string_comment returns ecore::EString:
+	//  STRING (PLUS STRING)*;
+	public String_commentElements getString_commentAccess() {
+		return (pString_comment != null) ? pString_comment : (pString_comment = new String_commentElements());
+	}
+	
+	public ParserRule getString_commentRule() {
+		return getString_commentAccess().getRule();
+	}
+
+	//annotation returns Annotation:
+	//  "annotation" class_modification; 
+	//
+	//    
+	//	  
+	//	
+	//
+	//
+	//
+	/// *------------------------------------------------------------------
+	// * LEXER RULES
+	// *------------------------------------------------------------------* /
+	//
+	/// * Keywords * / 
+	//
+	////terminal T_ALGORITHM	: 'algorithm'	;
+	////terminal T_AND		: 'and'		;
+	////terminal T_ANNOTATION	: 'annotation'	;
+	////terminal BLOCK		: 'block'	;
+	////terminal CODE		: 'Code'	;
+	////terminal   CLASS		: 'class'	;
+	/// *
+	//terminal CONNECT	: 'connect'	;
+	//terminal CONNECTOR	: 'connector'	;
+	//terminal   CONSTANT	: 'constant'	;
+	//terminal   DISCRETE	: 'discrete'	;
+	//terminal   DER           : 'der' 	;
+	//terminal   EACH		: 'each'	;
+	//terminal   ELSE		: 'else'	;
+	//terminal   ELSEIF	: 'elseif'	;
+	//terminal   ELSEWHEN	: 'elsewhen'	;
+	//terminal   T_END		: 'end'		;
+	//terminal   ENUMERATION	: 'enumeration'	;
+	//terminal   EQUATION	: 'equation'	;
+	//terminal   ENCAPSULATED	: 'encapsulated';
+	//terminal   EXPANDABLE	: 'expandable'  ;
+	//terminal   EXTENDS	: 'extends'     ;
+	//terminal   CONSTRAINEDBY : 'constrainedby' ;
+	//terminal   EXTERNAL	: 'external'	;
+	//terminal   T_FALSE	: 'false'	;
+	////terminal   FINAL		: 'final'	;
+	//terminal   FLOW		: 'flow'	;
+	//terminal   FOR		: 'for'		;
+	//terminal   FUNCTION	: 'function'	;
+	//terminal   IF		: 'if'		;
+	//terminal   IMPORT	: 'import'	;
+	//terminal   T_IN		: 'in'		;
+	//terminal   INITIAL	: 'initial'	;
+	//terminal   INNER		: 'inner'	;
+	//terminal   T_INPUT	: 'input'	;
+	//terminal   LOOP		: 'loop'	;
+	//terminal   MODEL		: 'model'	;
+	//terminal   T_NOT		: 'not'		;
+	//terminal   T_OUTER	: 'outer'	;
+	//terminal   OVERLOAD	: 'overload'	;
+	//terminal   T_OR		: 'or'		;
+	//terminal   T_OUTPUT	: 'output'	;
+	//terminal   PACKAGE	: 'package'	;
+	//terminal   PARAMETER	: 'parameter'	;
+	//terminal   PARTIAL	: 'partial'	;
+	//terminal   PROTECTED	: 'protected'	;
+	//terminal   PUBLIC	: 'public'	;
+	//terminal   RECORD	: 'record'	;
+	//terminal   REDECLARE	: 'redeclare'	;
+	//terminal   REPLACEABLE	: 'replaceable'	;
+	//terminal   RESULTS	: 'results'	;
+	//terminal   THEN		: 'then'	;
+	//terminal   T_TRUE	: 'true'	;
+	//terminal   TYPE		: 'type'	;
+	//terminal   WHEN		: 'when'	;
+	//terminal   WHILE		: 'while'	;
+	//terminal   WITHIN	: 'within' 	;
+	//terminal   RETURN	: 'return'  ;
+	//terminal   BREAK		: 'break'	;
+	//terminal   STREAM	: 'stream'	; / * for Modelica 3.1 stream connectors * /	
+	//
+	//  // ---------
+	//   // Operators
+	//   // ---------
+	public AnnotationElements getAnnotationAccess() {
+		return (pAnnotation != null) ? pAnnotation : (pAnnotation = new AnnotationElements());
+	}
+	
+	public ParserRule getAnnotationRule() {
+		return getAnnotationAccess().getRule();
+	}
+
+	//terminal DOT:
+	//  "."; 
+	//
+	//
+	//
+	/// *------------------------------------------------------------------
+	// * LEXER RULES
+	// *------------------------------------------------------------------* /
+	//
+	/// * Keywords * / 
+	//
+	////terminal T_ALGORITHM	: 'algorithm'	;
+	////terminal T_AND		: 'and'		;
+	////terminal T_ANNOTATION	: 'annotation'	;
+	////terminal BLOCK		: 'block'	;
+	////terminal CODE		: 'Code'	;
+	////terminal   CLASS		: 'class'	;
+	/// *
+	//terminal CONNECT	: 'connect'	;
+	//terminal CONNECTOR	: 'connector'	;
+	//terminal   CONSTANT	: 'constant'	;
+	//terminal   DISCRETE	: 'discrete'	;
+	//terminal   DER           : 'der' 	;
+	//terminal   EACH		: 'each'	;
+	//terminal   ELSE		: 'else'	;
+	//terminal   ELSEIF	: 'elseif'	;
+	//terminal   ELSEWHEN	: 'elsewhen'	;
+	//terminal   T_END		: 'end'		;
+	//terminal   ENUMERATION	: 'enumeration'	;
+	//terminal   EQUATION	: 'equation'	;
+	//terminal   ENCAPSULATED	: 'encapsulated';
+	//terminal   EXPANDABLE	: 'expandable'  ;
+	//terminal   EXTENDS	: 'extends'     ;
+	//terminal   CONSTRAINEDBY : 'constrainedby' ;
+	//terminal   EXTERNAL	: 'external'	;
+	//terminal   T_FALSE	: 'false'	;
+	////terminal   FINAL		: 'final'	;
+	//terminal   FLOW		: 'flow'	;
+	//terminal   FOR		: 'for'		;
+	//terminal   FUNCTION	: 'function'	;
+	//terminal   IF		: 'if'		;
+	//terminal   IMPORT	: 'import'	;
+	//terminal   T_IN		: 'in'		;
+	//terminal   INITIAL	: 'initial'	;
+	//terminal   INNER		: 'inner'	;
+	//terminal   T_INPUT	: 'input'	;
+	//terminal   LOOP		: 'loop'	;
+	//terminal   MODEL		: 'model'	;
+	//terminal   T_NOT		: 'not'		;
+	//terminal   T_OUTER	: 'outer'	;
+	//terminal   OVERLOAD	: 'overload'	;
+	//terminal   T_OR		: 'or'		;
+	//terminal   T_OUTPUT	: 'output'	;
+	//terminal   PACKAGE	: 'package'	;
+	//terminal   PARAMETER	: 'parameter'	;
+	//terminal   PARTIAL	: 'partial'	;
+	//terminal   PROTECTED	: 'protected'	;
+	//terminal   PUBLIC	: 'public'	;
+	//terminal   RECORD	: 'record'	;
+	//terminal   REDECLARE	: 'redeclare'	;
+	//terminal   REPLACEABLE	: 'replaceable'	;
+	//terminal   RESULTS	: 'results'	;
+	//terminal   THEN		: 'then'	;
+	//terminal   T_TRUE	: 'true'	;
+	//terminal   TYPE		: 'type'	;
+	//terminal   WHEN		: 'when'	;
+	//terminal   WHILE		: 'while'	;
+	//terminal   WITHIN	: 'within' 	;
+	//terminal   RETURN	: 'return'  ;
+	//terminal   BREAK		: 'break'	;
+	//terminal   STREAM	: 'stream'	; / * for Modelica 3.1 stream connectors * /	
+	//
+	//  // ---------
+	//   // Operators
+	//   // ---------
+	public TerminalRule getDOTRule() {
+		return (tDOT != null) ? tDOT : (tDOT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "DOT"));
+	} 
+
+	//terminal LPAR:
+	//  "(";
+	public TerminalRule getLPARRule() {
+		return (tLPAR != null) ? tLPAR : (tLPAR = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LPAR"));
+	} 
+
+	//terminal RPAR:
+	//  ")";
+	public TerminalRule getRPARRule() {
+		return (tRPAR != null) ? tRPAR : (tRPAR = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "RPAR"));
+	} 
+
+	//terminal LBRACK:
+	//  "[";
+	public TerminalRule getLBRACKRule() {
+		return (tLBRACK != null) ? tLBRACK : (tLBRACK = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LBRACK"));
+	} 
+
+	//terminal RBRACK:
+	//  "]";
+	public TerminalRule getRBRACKRule() {
+		return (tRBRACK != null) ? tRBRACK : (tRBRACK = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "RBRACK"));
+	} 
+
+	//terminal LBRACE:
+	//  "{";
+	public TerminalRule getLBRACERule() {
+		return (tLBRACE != null) ? tLBRACE : (tLBRACE = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LBRACE"));
+	} 
+
+	//terminal RBRACE:
+	//  "}";
+	public TerminalRule getRBRACERule() {
+		return (tRBRACE != null) ? tRBRACE : (tRBRACE = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "RBRACE"));
+	} 
+
+	//terminal EQUALS:
+	//  "=";
+	public TerminalRule getEQUALSRule() {
+		return (tEQUALS != null) ? tEQUALS : (tEQUALS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "EQUALS"));
+	} 
+
+	//terminal ASSIGN:
+	//  ":=";
+	public TerminalRule getASSIGNRule() {
+		return (tASSIGN != null) ? tASSIGN : (tASSIGN = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ASSIGN"));
+	} 
+
+	//terminal COMMA:
+	//  ",";
+	public TerminalRule getCOMMARule() {
+		return (tCOMMA != null) ? tCOMMA : (tCOMMA = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "COMMA"));
+	} 
+
+	//terminal COLON:
+	//  ":";
+	public TerminalRule getCOLONRule() {
+		return (tCOLON != null) ? tCOLON : (tCOLON = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "COLON"));
+	} 
+
+	//terminal SEMICOLON:
+	//  ";"; 
+	//    	   		 
+	//  / * elementwise operators * /
+	public TerminalRule getSEMICOLONRule() {
+		return (tSEMICOLON != null) ? tSEMICOLON : (tSEMICOLON = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SEMICOLON"));
+	} 
+
+	//terminal PLUS_EW:
+	//  ".+"; 
+	//  / * elementwise operators * /   
+	//         	     	   / * Modelica 3.0 * /
+	public TerminalRule getPLUS_EWRule() {
+		return (tPLUS_EW != null) ? tPLUS_EW : (tPLUS_EW = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "PLUS_EW"));
+	} 
+
+	//terminal MINUS_EW:
+	//  ".-";   / * Modelica 3.0 * / 
+	//        	        	   / * Modelica 3.0 * /
+	public TerminalRule getMINUS_EWRule() {
+		return (tMINUS_EW != null) ? tMINUS_EW : (tMINUS_EW = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "MINUS_EW"));
+	} 
+
+	//terminal STAR_EW:
+	//  ".*";   / * Modelica 3.0 * /     
+	//         	        	   / * Modelica 3.0 * /
+	public TerminalRule getSTAR_EWRule() {
+		return (tSTAR_EW != null) ? tSTAR_EW : (tSTAR_EW = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "STAR_EW"));
+	} 
+
+	//terminal SLASH_EW:
+	//  "./";   / * Modelica 3.0 * / 
+	//        	   		   / * Modelica 3.0 * /
+	public TerminalRule getSLASH_EWRule() {
+		return (tSLASH_EW != null) ? tSLASH_EW : (tSLASH_EW = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SLASH_EW"));
+	} 
+
+	//terminal POWER_EW:
+	//  ".^";   / * Modelica 3.0 * /   
+	//        	    		   / * Modelica 3.0 * /
+	public TerminalRule getPOWER_EWRule() {
+		return (tPOWER_EW != null) ? tPOWER_EW : (tPOWER_EW = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "POWER_EW"));
+	} 
+
+	//terminal STAR:
+	//  "*" "."?;   / * Modelica 3.0 * /
+	public TerminalRule getSTARRule() {
+		return (tSTAR != null) ? tSTAR : (tSTAR = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "STAR"));
+	} 
+
+	//terminal MINUS:
+	//  "-" "."?;
+	public TerminalRule getMINUSRule() {
+		return (tMINUS != null) ? tMINUS : (tMINUS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "MINUS"));
+	} 
+
+	//terminal PLUS:
+	//  "+" ("." | "&")?;
+	public TerminalRule getPLUSRule() {
+		return (tPLUS != null) ? tPLUS : (tPLUS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "PLUS"));
+	} 
+
+	//terminal LESS:
+	//  "<" "."?;
+	public TerminalRule getLESSRule() {
+		return (tLESS != null) ? tLESS : (tLESS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LESS"));
+	} 
+
+	//terminal LESSEQ:
+	//  "<=" "."?;
+	public TerminalRule getLESSEQRule() {
+		return (tLESSEQ != null) ? tLESSEQ : (tLESSEQ = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LESSEQ"));
+	} 
+
+	//terminal LESSGT:
+	//  "!=" "."? | "<>" "."?;
+	public TerminalRule getLESSGTRule() {
+		return (tLESSGT != null) ? tLESSGT : (tLESSGT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LESSGT"));
+	} 
+
+	//terminal GREATER:
+	//  ">" "."?;
+	public TerminalRule getGREATERRule() {
+		return (tGREATER != null) ? tGREATER : (tGREATER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "GREATER"));
+	} 
+
+	//terminal GREATEREQ:
+	//  ">=" "."?;
+	public TerminalRule getGREATEREQRule() {
+		return (tGREATEREQ != null) ? tGREATEREQ : (tGREATEREQ = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "GREATEREQ"));
+	} 
+
+	//terminal EQEQ:
+	//  "==" ("." | "&")?;
+	public TerminalRule getEQEQRule() {
+		return (tEQEQ != null) ? tEQEQ : (tEQEQ = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "EQEQ"));
+	} 
+
+	//terminal POWER:
+	//  "^" "."?;
+	public TerminalRule getPOWERRule() {
+		return (tPOWER != null) ? tPOWER : (tPOWER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "POWER"));
+	} 
+
+	//terminal SLASH:
+	//  "/" "."?;
+	public TerminalRule getSLASHRule() {
+		return (tSLASH != null) ? tSLASH : (tSLASH = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SLASH"));
+	} 
+
+	//terminal UNSIGNED_REAL:
+	//  "0".."9"+ "." "0".."9"* (("E" | "e") ("+" | "-")? "0".."9"+)? | "0".."9"+ ("E" | "e") ("+" | "-")
+	//  ? "0".."9"+;
+	public TerminalRule getUNSIGNED_REALRule() {
+		return (tUNSIGNED_REAL != null) ? tUNSIGNED_REAL : (tUNSIGNED_REAL = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "UNSIGNED_REAL"));
+	} 
+
+	//terminal UNSIGNED_INTEGER:
+	//  "0".."9"+;
+	public TerminalRule getUNSIGNED_INTEGERRule() {
+		return (tUNSIGNED_INTEGER != null) ? tUNSIGNED_INTEGER : (tUNSIGNED_INTEGER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "UNSIGNED_INTEGER"));
+	} 
+
+	//terminal IDENT:
+	//  ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
+	public TerminalRule getIDENTRule() {
+		return (tIDENT != null) ? tIDENT : (tIDENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "IDENT"));
+	} 
+
+	//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:
+	//  "\"" ("\\" ("b" | "t" | "n" | "f" | "r" | "\"" | "\'" | "\\") | !("\\" | "\""))* "\"" | "\'" ("\\" ("b" |
+	//  "t" | "n" | "f" | "r" | "\"" | "\'" | "\\") | !("\\" | "\'"))* "\'";
+	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();
+	} 
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/validation/AbstractModelicaBaseJavaValidator.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/validation/AbstractModelicaBaseJavaValidator.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/validation/AbstractModelicaBaseJavaValidator.java	(revision 540)
@@ -0,0 +1,20 @@
+package org.modelica.xtext.validation;
+ 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
+import org.eclipse.xtext.validation.ComposedChecks;
+
+@ComposedChecks(validators= {org.eclipse.xtext.validation.ImportUriValidator.class})
+public class AbstractModelicaBaseJavaValidator extends AbstractDeclarativeValidator {
+
+    @Override
+    protected List<? extends EPackage> getEPackages() {
+        List<EPackage> result = new ArrayList<EPackage>();
+        result.add(org.modelica.xtext.modelicaBase.ModelicaBasePackage.eINSTANCE);
+        return result;
+    }
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/validation/ModelicaBaseCheckValidator.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/validation/ModelicaBaseCheckValidator.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src-gen/org/modelica/xtext/validation/ModelicaBaseCheckValidator.java	(revision 540)
@@ -0,0 +1,28 @@
+
+package org.modelica.xtext.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.CheckType;
+
+public class ModelicaBaseCheckValidator extends org.eclipse.xtext.check.AbstractCheckValidator {
+
+	public ModelicaBaseCheckValidator() {
+		configure();
+	}
+	
+	protected void configure() {
+		addCheckFile("org::modelica::xtext::validation::ModelicaBaseFastChecks", CheckType.FAST);
+		addCheckFile("org::modelica::xtext::validation::ModelicaBaseChecks", CheckType.NORMAL);
+		addCheckFile("org::modelica::xtext::validation::ModelicaBaseExpensiveChecks", CheckType.EXPENSIVE);
+	}
+	
+	@Override
+	protected List<? extends EPackage> getEPackages() {
+	    List<EPackage> result = new ArrayList<EPackage>();
+	    result.add(org.modelica.xtext.modelicaBase.ModelicaBasePackage.eINSTANCE);
+		return result;
+	}
+	
+}
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/GenerateModelicaBase.mwe
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/GenerateModelicaBase.mwe	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/GenerateModelicaBase.mwe	(revision 540)
@@ -0,0 +1,78 @@
+<workflow>
+	<property file="org/modelica/xtext/GenerateModelicaBase.properties"/>
+	
+	<property name="runtimeProject" value="../${projectName}"/>
+	
+	<bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" platformUri="${runtimeProject}/.."/>
+	
+	<component class="org.eclipse.emf.mwe.utils.DirectoryCleaner" directory="${runtimeProject}/src-gen"/>
+	<component class="org.eclipse.emf.mwe.utils.DirectoryCleaner" directory="${runtimeProject}.ui/src-gen"/>
+	
+	<component class="org.eclipse.xtext.generator.Generator">
+		<pathRtProject value="${runtimeProject}"/>
+		<pathUiProject value="${runtimeProject}.ui"/>
+		<projectNameRt value="${projectName}"/>
+		<projectNameUi value="${projectName}.ui"/>
+		
+		<language uri="${grammarURI}" fileExtensions="${file.extensions}">
+			<!-- Java API to access grammar elements (required by several other fragments) -->
+			<fragment class="org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment"/>
+			
+			<!-- generates Java API for the generated EPackages -->
+			<fragment class="org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment"/>
+			
+			<!-- the serialization component -->
+			<fragment class="org.eclipse.xtext.generator.parseTreeConstructor.ParseTreeConstructorFragment"/>
+			
+			<!-- a custom ResourceFactory for use with EMF -->
+			<fragment class="org.eclipse.xtext.generator.resourceFactory.ResourceFactoryFragment" 
+				fileExtensions="${file.extensions}"/>
+				
+			<!-- the following fragment tries to use the Antlr Generator fragment which can be installed via update manager from http://download.itemis.com/updates/ -->
+			<fragment class="org.eclipse.xtext.generator.AntlrDelegatingFragment" />
+			
+			<!-- If you don't want to use the Antlr fragment for some reason, remove the antlr fragment and uncomment the packrat parser fragment below.
+			<fragment class="org.eclipse.xtext.generator.parser.PackratParserFragment"/>
+			 -->
+	
+			
+			<!-- java-based API for validation -->
+			<fragment class="org.eclipse.xtext.generator.validation.JavaValidatorFragment">
+                <composedCheck value="org.eclipse.xtext.validation.ImportUriValidator"/>
+            </fragment>
+			
+			<fragment class="org.eclipse.xtext.generator.validation.CheckFragment"/>
+            
+			<!-- scoping API -->
+			<fragment class="org.eclipse.xtext.generator.scoping.JavaScopingFragment"/>
+			
+			<!-- formatter API -->
+			<fragment class="org.eclipse.xtext.generator.formatting.FormatterFragment"/>
+
+			<!-- labeling API -->
+			<fragment class="org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment"/>
+
+			<!-- outline API -->
+			<fragment class="org.eclipse.xtext.ui.generator.outline.TransformerFragment"/>
+			<fragment class="org.eclipse.xtext.ui.generator.outline.OutlineNodeAdapterFactoryFragment"/>
+
+			
+			<!-- java-based API for content assistance -->
+			<fragment class="org.eclipse.xtext.ui.generator.contentAssist.JavaBasedContentAssistFragment"/>
+			<!-- the following fragment tries to use the Antlr based content assist fragment which can be downloaded from http://www.itemis.com 
+			     and will be ignored if it's not available. -->
+			<fragment class="org.eclipse.xtext.generator.DelegatingGeneratorFragment" 
+				delegate="de.itemis.xtext.antlr.XtextAntlrUiGeneratorFragment"
+				message="You are generating without ANTLR. It is highly recommended to download and use the plugin 'de.itemis.xtext.antlr' \n\t using the update site http://download.itemis.com/updates/.">
+			</fragment>
+			<!-- <fragment class="de.itemis.xtext.antlr.XtextAntlrUiGeneratorFragment"/> --> 
+			
+
+			<!-- project wizard (optional) -->
+			<!--
+			<fragment class="org.eclipse.xtext.ui.generator.projectWizard.SimpleProjectWizardFragment"
+				generatorProjectName="${projectName}.generator" modelFileExtension="mo"/>
+			-->
+		</language>
+	</component>
+</workflow>
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/GenerateModelicaBase.properties
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/GenerateModelicaBase.properties	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/GenerateModelicaBase.properties	(revision 540)
@@ -0,0 +1,3 @@
+grammarURI=classpath:/org/modelica/xtext/ModelicaBase.xtext
+file.extensions=mo
+projectName=org.modelica.xtext
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/ModelicaBase.xtext
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/ModelicaBase.xtext	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/ModelicaBase.xtext	(revision 540)
@@ -0,0 +1,672 @@
+grammar org.modelica.xtext.ModelicaBase with org.eclipse.xtext.common.Terminals
+
+generate modelicaBase "http://www.modelica.org/xtext/ModelicaBase"
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+/*
+ * Copyright (c) 2009 - currentYear, Adrian Pop [adrpo@ida.liu.se] 
+ * All rights reserved.
+ */
+
+  
+
+
+/*------------------------------------------------------------------
+ * PARSER RULES
+ *------------------------------------------------------------------*/
+
+StorageUnit:
+	('within' (name_path)? SEMICOLON)?
+	(('final')? classDefinition+=ClassDefinition ';')*
+	;
+
+EntityDefinition:
+	ClassDefinition | PartialDerivative | ClassModification | ClassOverloading | Enumeration ;
+
+ClassDefinition:
+	encapsulated?=('encapsulated')? partial?=('partial')? expandable?=('expandable')? 
+	classType=ClassType 
+	(name=IDENT comment=string_comment?
+    | 'extends' IDENT (modification=class_modification)? string_comment?)
+    elemList+=ElementList
+	(	elemList+=ElementList2
+		| initialEquationClauses+=initial_equation_rule_clause
+		| initialAlgorithmClauses+=initial_algorithm_clause
+		| equationClauses+=equation_rule_clause
+		| algorithmClauses+=algorithm_clause
+	)*
+	( extClause=external_clause )?
+    'end' IDENT
+	//| SUBTYPEOF type_specifier
+	;
+
+
+enum ClassType:
+	CLASS = 'class' | MODEL = 'model' | RECORD = 'record' | BLOCK = 'block' 
+	| CONNECTOR = 'connector' | TYPE = 'type' | PACKAGE = 'package' | FUNCTION = 'function'
+	;
+
+
+PartialDerivative:
+	'function' name=IDENT EQUALS 'der' '(' name_path ',' ident_list ')' comment=comment 
+	;
+
+ClassModification:
+	classType=ClassType name=IDENT EQUALS type_prefix typeSpecifier=type_specifier ( modification=class_modification )? comment=comment
+	;
+	
+ClassOverloading:
+	classType=ClassType name=IDENT EQUALS 'overload' '(' name_list ')' comment=comment
+	;
+	
+Enumeration:
+	classType=ClassType name=IDENT EQUALS 'enumeration' LPAR 
+	((ident+=IDENT enumComments+=comment ( COMMA ident+=IDENT  enumComments+=comment)* ) | COLON ) RPAR comment=comment
+	;
+
+ident_list :
+	IDENT (COMMA IDENT)*
+    ;
+
+
+name_list:
+	name_path (',' name_path)*
+	;
+
+external_clause returns ExternalClause:
+        'external'
+        ( languageSpecification=STRING )?
+        ( external_function_call )?
+        ( annotation=annotation )? SEMICOLON
+        ( extAnnotation=annotation SEMICOLON )?
+        ;
+
+
+external_function_call :
+	( component_reference EQUALS )?
+	IDENT LPAR ( expression_list )? RPAR
+	;
+
+ElementList:
+	((elements+=ClassElement | annotations+=annotation ) SEMICOLON)*
+	;
+
+ElementList2 returns ElementList:
+	'public' {PublicElementList} ((elements+=ClassElement | annotations+=annotation ) SEMICOLON)*
+	|  'protected' {ProtectesElementList}((elements+=ClassElement | annotations+=annotation ) SEMICOLON)*
+	;
+
+
+ClassElement:
+	  import_clause
+	| extends_clause
+	//| defineunit_clause
+	| ('redeclare')? ('final')? ('inner')? ('outer')?
+	( (ClassDefinition | component_clause) 
+	| ReplaceableElementClause
+	)
+	;
+
+ReplaceableElementClause:
+	('replaceable' entity=( ClassDefinition | component_clause ) (constrain=constraining_clause)?)
+	;
+
+import_clause returns ImportClause:
+	'import' (asName=IDENT EQUALS name=name_path | name=name_path_star) comment=comment
+	;
+
+/*
+defineunit_clause :
+	DEFINEUNIT IDENT (LPAR named_arguments RPAR)?		
+	;
+*/
+
+
+/*
+ * 2.2.3 Extends
+ */
+
+// Note that this is a minor modification of the standard by
+// allowing the comment.
+extends_clause returns ExtendsClause:
+	'extends' baseClass=name_path (modification=class_modification)? (annotation=annotation)?
+		;
+
+constraining_clause returns ConstrainingClause:
+	('extends' name=name_path  (modification=class_modification)? 
+	| 'constrainedby' name=name_path (modification=class_modification )?
+	) comment=comment
+	;
+
+/*
+ * 2.2.4 Component clause
+ */
+
+component_clause returns ComponentClause:
+	typePrefix=type_prefix typeSpecifier=type_specifier 
+	declarations+=component_declaration (COMMA declarations+=component_declaration)*
+	;
+
+type_prefix :
+	('flow'|'stream')? ('discrete'|'parameter'|'constant')? ('input'|'output')?
+	;
+
+type_specifier returns TypeSpecifier:
+	name=name_path
+	// TODO MML expr?
+	//((LESS type_specifier (COMMA type_specifier)* GREATER))?
+	(subscripts=array_subscripts)?
+	;
+
+component_declaration returns ComponentDeclaration:
+	IDENT (subscripts=array_subscripts)? (modification=modification)? ('if' condition=expression)? comment=comment
+	;
+
+/*
+ * 2.2.5 Modification
+ */
+
+modification returns Modification:
+	class_modification 
+	| SimpleModification
+	;
+
+SimpleModification :
+	EQUALS expression=expression | ASSIGN expression=expression
+	;
+
+class_modification returns ClassModification:
+	LPAR ( arguments+=argument ( COMMA arguments+=argument )* )? RPAR ( EQUALS expression=expression )?
+	;
+
+argument  :
+	('each')? ('final')? (ElementModification | ElementReplaceableClause)
+	| ElementRedeclaration
+	;
+
+ElementModification:
+	componetRef=component_reference ( modification=modification )? comment=string_comment?
+	;
+
+ElementRedeclaration :
+	'redeclare' ( 'each' )? ('final')?
+	( (ClassDefinition | ElementComponentClause) | ElementReplaceableClause )
+	;
+
+ElementReplaceableClause:
+        'replaceable' element=( ClassDefinition | ElementComponentClause ) (constraint=constraining_clause)?
+	;
+	
+ElementComponentClause :
+	typePrefix=type_prefix typeSpecifier=type_specifier IDENT (subscripts=array_subscripts)? 
+	(modification=modification)? comment=comment
+	;
+
+
+/*
+ * 2.2.6 Equations
+ */
+
+
+equation_rule_clause returns EquationClause:
+	'equation' (equationRules+=equation_rule SEMICOLON | annotations+=annotation SEMICOLON)+
+  	;
+
+algorithm_clause :
+	'algorithm' ( algorithmRules+=algorithm SEMICOLON | annotations+=annotation SEMICOLON)+
+	;
+
+initial_equation_rule_clause :
+	'initial' equation_rule_clause
+	;
+
+initial_algorithm_clause :
+	'initial' algorithm_clause
+	;
+
+equation_rule :
+	( equality_equation_rule	 
+	| conditional_equation_rule_e
+	| for_clause_e
+	| connect_clause
+	| when_clause_e   
+	//| FAILURE LPAR equation_rule RPAR
+	//| EQUALITY LPAR equation_rule RPAR
+	)
+	comment=comment
+	;
+
+algorithm :
+	( assign_clause_a
+	| conditional_equation_rule_a
+	| for_clause_a
+	| while_clause
+	| when_clause_a
+	| 'break'
+	| 'return'
+	//| FAILURE LPAR algorithm RPAR
+	//| EQUALITY LPAR algorithm RPAR
+	)
+	comment=comment
+	;
+
+assign_clause_a :          		  
+	simple_expression 
+	( ASSIGN expression  | EQUALS expression )?  
+	;
+
+equality_equation_rule :		  
+	simple_expression ( EQUALS expression )? 		
+	;
+
+conditional_equation_rule_e returns ConditionalEquationRule:
+	'if' expression 'then' (thenEquationClauses+=equation_rule SEMICOLON)* 
+	( elseifClauses+=equation_rule_elseif )* 
+	( 'else' (elseEquationClauses+=equation_rule SEMICOLON)* )? 'end' 'if'
+	;
+
+conditional_equation_rule_a returns ConditionAlgorithmRule:
+	'if' condition=expression 'then' (thenAlgorithmClauses+=algorithm SEMICOLON)* 
+	( elseifClauses+=algorithm_elseif )* 
+	( 'else' (elseAlgotithmClauses+=algorithm SEMICOLON)* )? 'end' 'if'
+	;
+
+for_clause_e returns ForEquationClause:
+	'for' forIndices=for_indices 'loop' (equationClauses+=equation_rule SEMICOLON)* 'end' 'for'
+	;
+
+for_clause_a returns ForAlgorithmClause:
+	'for' forIndices=for_indices 'loop' (algorithmClauses+=algorithm SEMICOLON)* 'end' 'for'
+	;
+
+while_clause returns WhileClause:
+	'while' condition=expression 'loop' (algorithmClauses+=algorithm SEMICOLON)* 'end' 'while'
+	;
+
+when_clause_e :
+	'when' condition=expression 'then' (thenEquationClauses+=equation_rule SEMICOLON)* 
+	(elseWhenClauses+=else_when_e)* 'end' 'when'
+	;
+
+else_when_e :
+	'elsewhen' condition=expression 'then' (thenEquationClauses+=equation_rule SEMICOLON)*
+	;
+
+when_clause_a :
+	'when' condition=expression 'then' (thenAlgorithmClauses+=equation_rule SEMICOLON)* 
+	(elseWhenClauses+=else_when_a)* 'end' 'when'
+	;
+
+else_when_a :
+	'elsewhen' condition=expression 'then' (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+	;
+
+equation_rule_elseif :
+	'elseif' condition=expression 'then' (thenEquationClauses+=equation_rule SEMICOLON)*
+	;
+
+algorithm_elseif :
+	'elseif' condition=expression 'then' (thenAlgorithmClauses+=equation_rule SEMICOLON)*
+	;
+
+connect_clause :
+	'connect' LPAR connector_ref COMMA connector_ref RPAR
+	;
+
+connector_ref :
+	IDENT ( array_subscripts )? ( DOT connector_ref_2 )?
+	;
+
+connector_ref_2 :
+	IDENT ( array_subscripts )?
+	;
+
+/*
+ * 2.2.7 Expressions
+ */
+expression :
+	( if_expression
+	| simple_expression
+	//| code_expression
+	/*| (MATCHCONTINUE expression_or_empty
+	   local_clause
+	   cases
+	   T_END MATCHCONTINUE)
+	| (MATCH expression_or_empty
+	   local_clause
+	   cases
+	   T_END MATCH)
+	   */
+	)
+	;
+
+expression_or_empty :
+	expression
+	| LPAR RPAR
+	;
+
+/*
+// The element_list is now modified
+local_clause:
+	(LOCAL element_list)?
+	;
+
+cases:
+	(onecase)+ (ELSE string_comment local_clause (EQUATION equation_rule_list_then)?
+	THEN expression_or_empty SEMICOLON)?
+	;
+
+onecase:
+	(CASE pattern string_comment local_clause (EQUATION equation_rule_list_then)?
+	THEN expression_or_empty SEMICOLON)
+	;
+
+pattern:
+	expression_or_empty
+	;
+*/
+
+if_expression :
+	'if' expression 'then' expression (elseif_expression)* 'else' expression
+	;
+
+elseif_expression :
+	'elseif' expression 'then' expression
+	;
+
+for_indices :
+        for_index (COMMA for_index)*
+	;
+
+for_index:
+        (IDENT ('in' expression)?)
+	;
+
+simple_expression :
+	  simple_expr 
+	//(COLONCOLON simple_expr)*
+	//| IDENT AS simple_expression
+	;
+
+simple_expr :
+	logical_expression ( COLON logical_expression ( COLON logical_expression )? )?
+	;
+
+/* Code quotation mechanism */
+/*
+code_expression  :
+	CODE LPAR ((expression RPAR)=> e=expression | m=modification | el=element (SEMICOLON)?
+	| eq=code_equation_rule_clause | ieq=code_initial_equation_rule_clause
+	| alg=code_algorithm_clause | ialg=code_initial_algorithm_clause
+	)  RPAR
+	;
+
+code_equation_rule_clause :
+	( EQUATION ( equation_rule SEMICOLON | annotation SEMICOLON )*  )
+	;
+
+code_initial_equation_rule_clause :
+	{ LA(2)==EQUATION }?
+	INITIAL ec=code_equation_rule_clause 
+	;
+
+code_algorithm_clause :
+	'algorithm' (algorithm SEMICOLON | annotation SEMICOLON)*
+	;
+
+code_initial_algorithm_clause :
+	{ LA(2) == 'algorithm' }?
+	INITIAL 'algorithm'
+	( algorithm SEMICOLON | annotation SEMICOLON )* 
+	;
+*/
+/* End Code quotation mechanism */
+
+logical_expression :
+	logical_term   ( 'or' logical_term )*
+	;
+
+logical_term :
+	logical_factor ( 'and' logical_factor )*
+	;
+
+logical_factor :
+	( 'not' )? relation
+	;
+
+relation :
+	arithmetic_expression 
+	( ( LESS | LESSEQ | GREATER | GREATEREQ | EQEQ | LESSGT ) arithmetic_expression )?
+	;
+
+arithmetic_expression :
+	unary_arithmetic_expression ( ( PLUS | MINUS | PLUS_EW | MINUS_EW ) term )*
+	;
+
+unary_arithmetic_expression  :
+	( PLUS term     
+	| MINUS term	   
+	| PLUS_EW term  
+	| MINUS_EW term 
+	| term          
+	)
+	;
+
+term :
+	factor ( ( STAR | SLASH | STAR_EW | SLASH_EW ) factor )*
+	;
+
+factor :
+	primary ( ( POWER | POWER_EW ) primary )?
+	;
+
+primary :
+	( UNSIGNED_INTEGER
+	| UNSIGNED_REAL
+	| STRING
+	| 'false'
+	| 'true'
+	| component_reference__function_call
+    | 'der' function_call
+	| LPAR expression_list RPAR
+	| LBRACK expression_list (SEMICOLON expression_list)* RBRACK
+	| LBRACE for_or_expression_list RBRACE
+	| 'end'
+	)
+	;
+
+component_reference__function_call  :
+	component_reference ( function_call )?
+	| 'initial' LPAR RPAR  
+	;
+
+name_path :
+	//{ LA(2)!=DOT }? 
+	IDENT | 
+	IDENT DOT name_path
+	;
+
+name_path_star 
+	:
+	//{ LA(2) != DOT }? 
+	IDENT ( STAR_EW )?| 
+	IDENT DOT name_path_star 
+	;
+
+component_reference :
+	  IDENT ( array_subscripts )? ( DOT component_reference )?
+	//| WILD
+	;
+
+function_call :
+	LPAR (function_arguments) RPAR 
+	;
+
+function_arguments :
+	(for_or_expression_list)? (named_arguments) ?
+	;
+
+for_or_expression_list :
+	//({LA(1)==IDENT && LA(2) == EQUALS || LA(1) == RPAR || LA(1) == RBRACE}?|
+	(expression ( COMMA for_or_expression_list2? | 'for' for_indices)? )
+	;
+
+for_or_expression_list2 :
+	// {LA(2) == EQUALS}? |
+	expression (COMMA for_or_expression_list2)?
+	;
+
+named_arguments :
+	named_arguments2 
+	;
+
+named_arguments2 :
+	named_argument (COMMA named_argument)*
+	;
+
+named_argument :
+	IDENT EQUALS expression
+	;
+
+expression_list :
+	expression_list2 
+	;
+
+expression_list2 :
+	expression (COMMA expression_list2)?
+	;
+
+array_subscripts :
+	LBRACK subscript ( COMMA subscript )* RBRACK
+	;
+
+subscript :
+	expression | COLON
+	;
+
+comment returns Comment:
+	string=string_comment? annotation=annotation? 
+	;
+
+string_comment :
+	 STRING (PLUS STRING)*
+	;
+
+annotation returns Annotation:
+	'annotation' class_modification
+	;
+
+
+
+/*------------------------------------------------------------------
+ * LEXER RULES
+ *------------------------------------------------------------------*/
+
+/* Keywords */
+
+//terminal T_ALGORITHM	: 'algorithm'	;
+//terminal T_AND		: 'and'		;
+//terminal T_ANNOTATION	: 'annotation'	;
+//terminal BLOCK		: 'block'	;
+//terminal CODE		: 'Code'	;
+//terminal   CLASS		: 'class'	;
+/*
+terminal CONNECT	: 'connect'	;
+terminal CONNECTOR	: 'connector'	;
+terminal   CONSTANT	: 'constant'	;
+terminal   DISCRETE	: 'discrete'	;
+terminal   DER           : 'der' 	;
+terminal   EACH		: 'each'	;
+terminal   ELSE		: 'else'	;
+terminal   ELSEIF	: 'elseif'	;
+terminal   ELSEWHEN	: 'elsewhen'	;
+terminal   T_END		: 'end'		;
+terminal   ENUMERATION	: 'enumeration'	;
+terminal   EQUATION	: 'equation'	;
+terminal   ENCAPSULATED	: 'encapsulated';
+terminal   EXPANDABLE	: 'expandable'  ;
+terminal   EXTENDS	: 'extends'     ;
+terminal   CONSTRAINEDBY : 'constrainedby' ;
+terminal   EXTERNAL	: 'external'	;
+terminal   T_FALSE	: 'false'	;
+//terminal   FINAL		: 'final'	;
+terminal   FLOW		: 'flow'	;
+terminal   FOR		: 'for'		;
+terminal   FUNCTION	: 'function'	;
+terminal   IF		: 'if'		;
+terminal   IMPORT	: 'import'	;
+terminal   T_IN		: 'in'		;
+terminal   INITIAL	: 'initial'	;
+terminal   INNER		: 'inner'	;
+terminal   T_INPUT	: 'input'	;
+terminal   LOOP		: 'loop'	;
+terminal   MODEL		: 'model'	;
+terminal   T_NOT		: 'not'		;
+terminal   T_OUTER	: 'outer'	;
+terminal   OVERLOAD	: 'overload'	;
+terminal   T_OR		: 'or'		;
+terminal   T_OUTPUT	: 'output'	;
+terminal   PACKAGE	: 'package'	;
+terminal   PARAMETER	: 'parameter'	;
+terminal   PARTIAL	: 'partial'	;
+terminal   PROTECTED	: 'protected'	;
+terminal   PUBLIC	: 'public'	;
+terminal   RECORD	: 'record'	;
+terminal   REDECLARE	: 'redeclare'	;
+terminal   REPLACEABLE	: 'replaceable'	;
+terminal   RESULTS	: 'results'	;
+terminal   THEN		: 'then'	;
+terminal   T_TRUE	: 'true'	;
+terminal   TYPE		: 'type'	;
+terminal   WHEN		: 'when'	;
+terminal   WHILE		: 'while'	;
+terminal   WITHIN	: 'within' 	;
+terminal   RETURN	: 'return'  ;
+terminal   BREAK		: 'break'	;
+terminal   STREAM	: 'stream'	; /* for Modelica 3.1 stream connectors */	
+
+  // ---------
+  // Operators
+  // ---------
+  
+terminal 	DOT		: '.'           ;  
+terminal  LPAR		: '('		;
+terminal   RPAR		: ')'		;
+terminal   LBRACK	: '['		;
+terminal   RBRACK	: ']'		;
+terminal   LBRACE	: '{'		;
+terminal   RBRACE	: '}'		;
+terminal   EQUALS	: '='		;
+terminal   ASSIGN	: ':='		;
+terminal   COMMA		: ','		;
+terminal   COLON		: ':'		;
+terminal   SEMICOLON	: ';'		;
+  /* elementwise operators */  
+terminal   PLUS_EW     	: '.+'  	; /* Modelica 3.0 */
+terminal   MINUS_EW    	: '.-'     	; /* Modelica 3.0 */    
+terminal   STAR_EW     	: '.*'     	; /* Modelica 3.0 */
+terminal   SLASH_EW    	: './'		; /* Modelica 3.0 */  
+terminal   POWER_EW    	: '.^' 		; /* Modelica 3.0 */
+  
+terminal STAR		: '*'('.')? 				;
+terminal MINUS		: '-'('.')?					;
+terminal PLUS		: '+'('.'|'&')?				; 
+terminal LESS		: '<'('.')?					;
+terminal LESSEQ		: '<='('.')?				;
+terminal LESSGT		: '!='('.')?|'<>'('.')?		;
+terminal GREATER		: '>'('.')?					;
+terminal GREATEREQ	: '>='('.')?				;
+terminal EQEQ		: '=='('.'|'&')?			;
+terminal POWER		: '^'('.')?					;
+terminal SLASH		: '/'('.')?					;
+
+terminal UNSIGNED_REAL:
+	(('0'..'9')+ '.' ('0'..'9')* (('E'|'e') ('+'|'-')? ('0'..'9')+)? )
+	|(('0'..'9')+ ('E'|'e') ('+'|'-')? ('0'..'9')+) 
+	;
+
+terminal UNSIGNED_INTEGER:
+	('0'..'9')+
+	;
+
+terminal IDENT : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/ModelicaBaseRuntimeModule.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/ModelicaBaseRuntimeModule.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/ModelicaBaseRuntimeModule.java	(revision 540)
@@ -0,0 +1,11 @@
+/*
+ * generated by Xtext
+ */
+package org.modelica.xtext;
+
+/**
+ * Use this class to register components to be used within the IDE.
+ */
+public class ModelicaBaseRuntimeModule extends org.modelica.xtext.AbstractModelicaBaseRuntimeModule {
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/formatting/ModelicaBaseFormatter.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/formatting/ModelicaBaseFormatter.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/formatting/ModelicaBaseFormatter.java	(revision 540)
@@ -0,0 +1,25 @@
+/*
+ * generated by Xtext
+ */
+package org.modelica.xtext.formatting;
+
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
+ * on how and when to use it 
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+public class ModelicaBaseFormatter extends AbstractDeclarativeFormatter {
+	
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+		org.modelica.xtext.services.ModelicaBaseGrammarAccess f = (org.modelica.xtext.services.ModelicaBaseGrammarAccess) getGrammarAccess();
+
+		//...
+	}
+}
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/scoping/ModelicaBaseScopeProvider.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/scoping/ModelicaBaseScopeProvider.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/scoping/ModelicaBaseScopeProvider.java	(revision 540)
@@ -0,0 +1,17 @@
+/*
+ * generated by Xtext
+ */
+package org.modelica.xtext.scoping;
+
+import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#scoping
+ * on how and when to use it 
+ *
+ */
+public class ModelicaBaseScopeProvider extends AbstractDeclarativeScopeProvider {
+
+}
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseChecks.chk
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseChecks.chk	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseChecks.chk	(revision 540)
@@ -0,0 +1,17 @@
+/*
+ * This check file is used to specify constraints for the derived metamodels.
+ * They will be executed by the editor when the user saves a file.
+ * At generation time they will be executed as well.
+ *
+ * Example:
+ *
+ * import myDsl;
+ *
+ * context Class WARNING "Name should start with a capital" :
+ *    name.toFirstUpper() == name;
+ */
+
+import ModelicaBase
+
+//context ModelicaClass ERROR "Package can not have any component clauses (declarations)":
+	
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseExpensiveChecks.chk
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseExpensiveChecks.chk	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseExpensiveChecks.chk	(revision 540)
@@ -0,0 +1,12 @@
+/*
+ * This check file is used to specify expensive constraints for the derived
+ * metamodels. They will only be executed when triggered explicitly or
+ * at generation time.
+ *
+ * import myDsl;
+ *
+ * extension org::xtext::example::MyExtensions; 
+ *
+ * context Model ERROR "Inconsistent Model" :
+ *    invariantThatIsComplexToCheck();
+ */
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseFastChecks.chk
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseFastChecks.chk	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseFastChecks.chk	(revision 540)
@@ -0,0 +1,13 @@
+/*
+ * This check file is used to specify inexpensive constraints for the
+ * derived metamodels. They will be executed by the editor when the
+ * user opens a file and whenever the user changes its content.
+ * At generation time they will be executed as well.
+ *  
+ * Example:
+ *
+ * import myDsl;
+ *
+ * context Class WARNING "Name should start with a capital" :
+ *    name.toFirstUpper() == name;
+ */
Index: branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseJavaValidator.java
===================================================================
--- branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseJavaValidator.java	(revision 540)
+++ branches/xtext-MDT/org.modelica.xtext/src/org/modelica/xtext/validation/ModelicaBaseJavaValidator.java	(revision 540)
@@ -0,0 +1,13 @@
+package org.modelica.xtext.validation;
+ 
+
+public class ModelicaBaseJavaValidator extends AbstractModelicaBaseJavaValidator {
+
+//	@Check
+//	public void checkTypeNameStartsWithCapital(Type type) {
+//		if (!Character.isUpperCase(type.getName().charAt(0))) {
+//			warning("Name should start with a capital", MyDslPackage.TYPE__NAME);
+//		}
+//	}
+
+}
