[509750] - Main specification artefacts of the Delphi example
diff --git a/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateDelphiModels.mwe2 b/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateDelphiModels.mwe2
new file mode 100644
index 0000000..7c2b68c
--- /dev/null
+++ b/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateDelphiModels.mwe2
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Willink Transformations Ltd., University of York and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation
+ * 
+ *******************************************************************************/
+module org.eclipse.qvtd.build.mwe2.GenerateDelphiModels
+
+import org.eclipse.ocl.examples.build.utilities.*
+import org.eclipse.ocl.examples.build.xtend.*
+import org.eclipse.emf.ecore.resource.impl.*
+
+var projectName = "org.eclipse.qvtd.cs2as.compiler.tests"
+var examplesFolder = "src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi"
+
+Workflow {
+	bean = ResourceSetImpl : resourceSet {}
+    bean = ProjectMapSetup{ resourceSet = resourceSet}
+    bean = EcoreGenModelSetup { resourceSet = resourceSet }
+    
+	component = GenerateModel { resourceSet = resourceSet skipOnErrors = true
+    	genModel = "/${projectName}/${examplesFolder}/astm.genmodel"
+    }
+    
+    component = GenerateModel { resourceSet = resourceSet skipOnErrors = true
+    	genModel = "/${projectName}/${examplesFolder}/Delphi.genmodel"
+    }
+    
+    component = GenerateModel { resourceSet = resourceSet skipOnErrors = true
+    	genModel = "/${projectName}/${examplesFolder}/Lookup.genmodel"
+    }
+    
+    component = GenerateASVisitors { resourceSet = resourceSet
+    	projectName = "${projectName}"
+    	genModelFile = "${examplesFolder}/astm.genmodel"
+    }
+}
+
+
diff --git a/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateDelphiParser.mwe2 b/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateDelphiParser.mwe2
new file mode 100644
index 0000000..3ec3d88
--- /dev/null
+++ b/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateDelphiParser.mwe2
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Willink Transformations Ltd., University of York and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ *
+ * Contributors:
+ *     Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation
+ * 
+ *******************************************************************************/
+module org.eclipse.qvtd.build.mwe2.GenerateDelphiParser
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.xtext.generator.*
+import org.eclipse.xtext.xtext.generator.model.project.*
+
+var grammarURI = "classpath:/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.xtext"
+var fileExtensions = "delphi"
+var projectName = "org.eclipse.qvtd.cs2as.compiler.tests"
+var rootPath = "../../tests/"
+var generateXtendStub = false
+var encoding = "UTF-8"
+
+Workflow {
+    component = XtextGenerator {
+		configuration = {
+			project = StandardProjectConfig {
+				
+				baseName = projectName
+				rootPath = rootPath
+				createEclipseMetaData = true
+				runtime = {
+					srcGen = "${rootPath}/${projectName}/src-gen-delphi"
+				}
+			}
+			code = {
+				encoding = encoding
+				fileHeader = "/*\n * generated by Xtext \${version}\n */"
+				lineDelimiter = "\n"
+				preferXtendStubs = generateXtendStub
+			}
+			
+		}
+		language = StandardLanguage {
+			name = "org.eclipse.qvtd.cs2as.compiler.tests.models.delphi"
+			fileExtensions = fileExtensions
+			grammarUri = grammarURI
+			referencedResource = "platform:/resource/${projectName}/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.genmodel"
+			serializer = {
+				generateStub = false
+			}
+			validator = {
+				// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+			}
+			parserGenerator = {
+				options = {
+					backtrack = true
+				}
+			}
+		}
+	}
+}
+
diff --git a/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateTestModels.mwe2 b/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateTestModels.mwe2
index a827454..fe4ea82 100644
--- a/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateTestModels.mwe2
+++ b/releng/org.eclipse.qvtd.build/src/org/eclipse/qvtd/build/mwe2/GenerateTestModels.mwe2
@@ -27,6 +27,7 @@
     component = @org.eclipse.qvtd.build.mwe2.GenerateExample4Models {}
     component = @org.eclipse.qvtd.build.mwe2.GenerateExample5Models {}
     component = @org.eclipse.qvtd.build.mwe2.GenerateCompaniesModels {}
+    component = @org.eclipse.qvtd.build.mwe2.GenerateDelphiModels {}
   
 	component = GenerateModel { resourceSet = resourceSet skipOnErrors = true 
     	genModel = "/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families2Persons.genmodel"
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.ecore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.ecore
new file mode 100644
index 0000000..0dfeaf2
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.ecore
@@ -0,0 +1,648 @@
+<?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="delphi" nsURI="http://cs2as/tests/delphi/CS/1.0" nsPrefix="delphi">
+  <eClassifiers xsi:type="ecore:EClass" name="mainRule" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="file" eType="#//file" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="file" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="program" eSuperTypes="#//file">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="paramsList" eType="#//identList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//programBlock"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="unit" eSuperTypes="#//file">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interfaceSect" eType="#//interfaceSection"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="implementationSect" eType="#//implementationSection"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initSect" eType="#//initSection"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="packageDecl" eSuperTypes="#//file">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="requires" eType="#//requiresClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="contains" eType="#//containsClause"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="library" eSuperTypes="#//file">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="pBlock" eType="#//programBlock"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="programBlock" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="uses" eType="#//usesClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//block"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="usesClause" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" eType="#//identList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="interfaceSection" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="uses" eType="#//usesClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interfaceDecl" upperBound="-1"
+        eType="#//interfaceDecl" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="interfaceDecl" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="exportedHeading" eSuperTypes="#//interfaceDecl">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="pHeading" eType="#//procedureHeading"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="directive" eType="#//directive"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fHeading" eType="#//functionHeading"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="implementationSection" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="uses" eType="#//usesClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declSect" upperBound="-1"
+        eType="#//declSection" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exports" upperBound="-1"
+        eType="#//exportsStmt" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="block" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declSect" eType="#//declSection"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exports" upperBound="-1"
+        eType="#//exportsStmt" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="compound" eType="#//compoundStmt"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="exportsItem" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constExp" upperBound="-1"
+        eType="#//constExpr" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="exportsStmt" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="items" upperBound="-1"
+        eType="#//exportsItem" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="declSection" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="labelDeclSection" eSuperTypes="#//declSection">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="constSection" eSuperTypes="#//interfaceDecl #//declSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constantDecl" upperBound="-1"
+        eType="#//constantDecl" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="constantDecl" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="const" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//typeId"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typedConstat" eType="#//typedConstant"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="typeSection" eSuperTypes="#//interfaceDecl #//declSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeDecl" upperBound="-1"
+        eType="#//typeDecl" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="typeDecl" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="restrictedType" eType="#//restrictedType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="typedConstant" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="const" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="array" eType="#//arrayConstant"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="record" eType="#//recordConstant"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="arrayConstant" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typedConstant" eType="#//typedConstant"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="recordConstant" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="recordField" upperBound="-1"
+        eType="#//recordFieldConstant" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="recordFieldConstant" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typedConstant" eType="#//typedConstant"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="type" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="restrictedType" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="classRefType" eSuperTypes="#//type">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//typeId"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="simpleType" eSuperTypes="#//type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="realType" eSuperTypes="#//simpleType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ordinalType" eSuperTypes="#//simpleType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ordIdent" eSuperTypes="#//ordinalType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="variantType" eSuperTypes="#//type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="subrangeType" eSuperTypes="#//ordinalType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="first" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="last" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="enumeratedType" eSuperTypes="#//ordinalType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="element" upperBound="-1"
+        eType="#//enumeratedTypeElement" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="enumeratedTypeElement" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="literalExp" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="stringType" eSuperTypes="#//type">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constExp" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="strucType" eSuperTypes="#//type">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="arrayType" eSuperTypes="#//strucType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ordinalType" upperBound="-1"
+        eType="#//ordinalType" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ordinalTyp" upperBound="-1"
+        eType="#//ordinalType" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="recType" eSuperTypes="#//strucType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fields" eType="#//fieldList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="fieldList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="field" upperBound="-1"
+        eType="#//fieldDecl" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variantSect" eType="#//variantSection"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="fieldDecl" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" eType="#//identList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="variantSection" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//typeId"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="recVariants" upperBound="-1"
+        eType="#//recVariant" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="recVariant" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constExp" upperBound="-1"
+        eType="#//constExpr" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fieldList" eType="#//fieldList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="setType" eSuperTypes="#//strucType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ordinal" eType="#//ordinalType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="fileType" eSuperTypes="#//strucType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//typeId"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="pointerType" eSuperTypes="#//type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="procedureType" eSuperTypes="#//type">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="pHeading" eType="#//procedureHeading"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fHeading" eType="#//functionHeading"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="varSection" eSuperTypes="#//interfaceDecl #//declSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="varDecls" upperBound="-1"
+        eType="#//varDecl" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="varDecl" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" eType="#//identList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="absId" eType="#//ident"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="absConst" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="absIniti" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="expression" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="simpleExpression" eSuperTypes="#//expression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="term" eSuperTypes="#//simpleExpression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="factor" eSuperTypes="#//term">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="designator" eType="#//designator"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expList" eType="#//exprList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="number" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="string" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nestedExp" eType="#//expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="setConstuctor" eType="#//setConstructor"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//typeId"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="relOp" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="addOp" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="mulOp" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="designator" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subpart" eType="#//designatorSubPart"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="designator" eType="#//designator"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="designatorSubPart" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="part" eType="#//designatorPart"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exprList" upperBound="-1"
+        eType="#//exprList" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="designatorPart" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reservedWord" eType="#//reservedWord"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="setConstructor" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="element" upperBound="-1"
+        eType="#//setElement" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="setElement" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="first" eType="#//expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="last" eType="#//expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="exprList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exps" upperBound="-1" eType="#//expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="stmtList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="statments" upperBound="-1"
+        eType="#//statement" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="statement" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="labelId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="statement" eType="#//unlabelledStatement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="unlabelledStatement" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="simpleStatement" eSuperTypes="#//unlabelledStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="structStmt" eSuperTypes="#//unlabelledStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="compoundStmt" eSuperTypes="#//structStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stamtList" eType="#//stmtList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="conditionalStmt" eSuperTypes="#//structStmt"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ifStmt" eSuperTypes="#//conditionalStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="then" eType="#//statement"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="else" eType="#//statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="caseStmt" eSuperTypes="#//conditionalStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cases" upperBound="-1"
+        eType="#//caseSelector" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="default" eType="#//stmtList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="caseSelector" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="labels" upperBound="-1"
+        eType="#//caseLabel" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stmt" eType="#//statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="caseLabel" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="first" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="last" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="loopStmt" eSuperTypes="#//structStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stmt" eType="#//statement"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="repeatStmt" eSuperTypes="#//loopStmt"/>
+  <eClassifiers xsi:type="ecore:EClass" name="whileStmt" eSuperTypes="#//loopStmt"/>
+  <eClassifiers xsi:type="ecore:EClass" name="forStmt" eSuperTypes="#//loopStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="varId" eType="#//qualId"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="varInit" eType="#//expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="withStmt" eSuperTypes="#//structStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="vars" eType="#//identList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stmt" eType="#//statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="tryStmt" eSuperTypes="#//structStmt">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stmtList" eType="#//stmtList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exception" eType="#//exceptionBlock"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="final" eType="#//stmtList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="exceptionBlock" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exceptionId" upperBound="-1"
+        eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" upperBound="-1" eType="#//type"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="doStmt" upperBound="-1"
+        eType="#//statement" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseStmts" eType="#//stmtList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="raiseStmt" eSuperTypes="#//structStmt">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="raise" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="at" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="assemblerStmt" eSuperTypes="#//structStmt"/>
+  <eClassifiers xsi:type="ecore:EClass" name="procedureDeclSection" eSuperTypes="#//declSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="directive" eType="#//directive"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="block" eType="#//block"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="procedureDecl" eSuperTypes="#//procedureDeclSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="heading" eType="#//procedureHeading"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="functionDecl" eSuperTypes="#//procedureDeclSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="heading" eType="#//functionHeading"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="functionHeading" eSuperTypes="#//methodHeading">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="procedureHeading" eSuperTypes="#//methodHeading"/>
+  <eClassifiers xsi:type="ecore:EClass" name="formalParameters" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="params" upperBound="-1"
+        eType="#//formalParm" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="formalParm" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="param" eType="#//parameter"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="parameter" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="directive" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dir" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="messageExp" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="objectType" eSuperTypes="#//restrictedType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="heritage" eType="#//objHeritage"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fieldList" eType="#//objFieldList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodList" eType="#//methodList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="objHeritage" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//qualId" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="methodList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="heading" eType="#//methodHeading"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="directive" upperBound="-1"
+        eType="#//directive" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="methodHeading" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formalParams" eType="#//formalParameters"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="constructorHeading" eSuperTypes="#//methodHeading"/>
+  <eClassifiers xsi:type="ecore:EClass" name="destructorHeading" eSuperTypes="#//methodHeading"/>
+  <eClassifiers xsi:type="ecore:EClass" name="objFieldList" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="initSection" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stmtList" eType="#//stmtList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="endStmtList" eType="#//stmtList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classType" eSuperTypes="#//restrictedType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="heritage" eType="#//classHeritage"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fieldList" eType="#//classFieldList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodList" eType="#//classMethodList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="propList" eType="#//classPropertyList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classHeritage" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="classFieldList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="field" upperBound="-1"
+        eType="#//classField" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classField" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fieldList" eType="#//objFieldList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classMethodList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="metod" upperBound="-1"
+        eType="#//classMethod" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classMethod" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodList" eType="#//methodList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classPropertyList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="property" upperBound="-1"
+        eType="#//classProperty" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="classProperty" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="propList" eType="#//propertyList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="propertyList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interface" eType="#//propertyInterface"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="specifiers" eType="#//propertySpecifiers"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="port" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="propertyInterface" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="paramList" eType="#//propertyParameterList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="propertyParameterList" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" upperBound="-1"
+        eType="#//identList" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" upperBound="-1"
+        eType="#//typeId" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="propertySpecifiers" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="readId" eType="#//ident"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="writeId" eType="#//ident"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="storeId" eType="#//ident"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="storeExp" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaulExp" eType="#//constExpr"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="implement" eType="#//typeId"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="interfaceType" eSuperTypes="#//restrictedType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="heritage" eType="#//interfaceHeritage"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodList" eType="#//classMethodList"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="propList" upperBound="-1"
+        eType="#//classPropertyList" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="interfaceHeritage" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" eType="#//identList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="requiresClause" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" upperBound="-1"
+        eType="#//identList" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="containsClause" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" upperBound="-1"
+        eType="#//identList" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="identList" eSuperTypes="#//objFieldList #//classHeritage">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//type" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ids" upperBound="-1" eType="#//ident"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="qualId" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="unitId" eType="#//unitId"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="typeId" eSuperTypes="#//type #//pointerType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="unitId" eType="#//unitId"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//qualId" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ident" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="reservedWord" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="constExpr" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="recordConstExpr" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="id" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constExp" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="unitId" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="relExp" eSuperTypes="#//expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="relOp" eType="#//relOp"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//simpleExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="addExp" eSuperTypes="#//simpleExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//simpleExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="addOp" eType="#//addOp"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//term"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="multExp" eSuperTypes="#//term">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//term" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="multOp" eType="#//mulOp"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//factor"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="simpleFactor" eSuperTypes="#//factor"/>
+  <eClassifiers xsi:type="ecore:EClass" name="assignmentStmnt" eSuperTypes="#//simpleStatement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="designator" eType="#//designator"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="callStmnt" eSuperTypes="#//simpleStatement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="designator" eType="#//designator"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="args" eType="#//exprList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="inheritedStamnt" eSuperTypes="#//simpleStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="gotoStmnt" eSuperTypes="#//simpleStatement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="parameterList" eSuperTypes="#//parameter">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="idList" eType="#//identList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="parameterSimple" eSuperTypes="#//parameter">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="if" eType="#//ident" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initExp" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MultipleId" eSuperTypes="#//ident">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" unique="false" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ReservedId" eSuperTypes="#//ident">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reservedWord" eType="#//reservedWord"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MineID" eSuperTypes="#//ident">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="first" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="second" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ConstExp" eSuperTypes="#//constExpr">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MultipleConstExp" eSuperTypes="#//constExpr">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exps" upperBound="-1" eType="#//constExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RecordConstExp" eSuperTypes="#//constExpr">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exps" upperBound="-1" eType="#//recordConstExpr"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CSTrace" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ast" eType="ecore:EClass astm.ecore#//Visitable"
+        transient="true"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.genmodel b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.genmodel
new file mode 100644
index 0000000..8826a3d
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.genmodel
@@ -0,0 +1,485 @@
+<?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" copyrightText="Copyright (c)  2016 Willink Transformations, Univesity of York and others.&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA;     Adolfo Sanchez-Barbudo Herrera - initial API and implementation"
+    modelDirectory="/org.eclipse.qvtd.cs2as.compiler.tests/emf-gen" modelPluginID="org.eclipse.qvtd.cs2as.compiler.tests"
+    forceOverwrite="true" modelName="Delphi" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    complianceLevel="8.0" copyrightFields="false" runtimeVersion="2.12" usedGenPackages="astm.genmodel#//astm">
+  <genPackages prefix="Delphi" disposableProviderFactory="true" fileExtensions="delphi"
+      ecorePackage="Delphi.ecore#/">
+    <genClasses ecoreClass="Delphi.ecore#//mainRule">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//mainRule/file"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//file">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//file/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//program">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//program/paramsList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//program/block"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//unit">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//unit/port"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//unit/interfaceSect"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//unit/implementationSect"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//unit/initSect"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//packageDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//packageDecl/requires"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//packageDecl/contains"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//library">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//library/pBlock"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//programBlock">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//programBlock/uses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//programBlock/block"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//usesClause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//usesClause/idList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//interfaceSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//interfaceSection/uses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//interfaceSection/interfaceDecl"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//interfaceDecl"/>
+    <genClasses ecoreClass="Delphi.ecore#//exportedHeading">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exportedHeading/pHeading"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exportedHeading/directive"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exportedHeading/fHeading"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//implementationSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//implementationSection/uses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//implementationSection/declSect"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//implementationSection/exports"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//block">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//block/declSect"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//block/exports"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//block/compound"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//exportsItem">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exportsItem/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exportsItem/constExp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//exportsStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exportsStmt/items"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//declSection"/>
+    <genClasses ecoreClass="Delphi.ecore#//labelDeclSection">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//labelDeclSection/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//constSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//constSection/constantDecl"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//constantDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//constantDecl/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//constantDecl/const"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//constantDecl/port"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//constantDecl/typeRef"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//constantDecl/typedConstat"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//typeSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typeSection/typeDecl"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//typeDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typeDecl/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typeDecl/type"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//typeDecl/port"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typeDecl/restrictedType"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//typedConstant">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typedConstant/const"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typedConstant/array"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typedConstant/record"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//arrayConstant">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//arrayConstant/typedConstant"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//recordConstant">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recordConstant/recordField"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//recordFieldConstant">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recordFieldConstant/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recordFieldConstant/typedConstant"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//type"/>
+    <genClasses ecoreClass="Delphi.ecore#//restrictedType"/>
+    <genClasses ecoreClass="Delphi.ecore#//classRefType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classRefType/typeRef"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//simpleType"/>
+    <genClasses ecoreClass="Delphi.ecore#//realType"/>
+    <genClasses ecoreClass="Delphi.ecore#//ordinalType"/>
+    <genClasses ecoreClass="Delphi.ecore#//ordIdent"/>
+    <genClasses ecoreClass="Delphi.ecore#//variantType"/>
+    <genClasses ecoreClass="Delphi.ecore#//subrangeType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//subrangeType/first"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//subrangeType/last"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//enumeratedType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//enumeratedType/element"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//enumeratedTypeElement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//enumeratedTypeElement/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//enumeratedTypeElement/literalExp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//stringType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//stringType/constExp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//strucType">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//strucType/port"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//arrayType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//arrayType/ordinalType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//arrayType/ordinalTyp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//arrayType/type"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//recType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recType/fields"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//fieldList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//fieldList/field"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//fieldList/variantSect"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//fieldDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//fieldDecl/idList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//fieldDecl/type"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//fieldDecl/port"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//variantSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//variantSection/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//variantSection/typeRef"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//variantSection/recVariants"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//recVariant">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recVariant/constExp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recVariant/fieldList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//setType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//setType/ordinal"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//fileType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//fileType/typeRef"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//pointerType"/>
+    <genClasses ecoreClass="Delphi.ecore#//procedureType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//procedureType/pHeading"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//procedureType/fHeading"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//varSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//varSection/varDecls"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//varDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//varDecl/idList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//varDecl/type"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//varDecl/absId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//varDecl/absConst"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//varDecl/absIniti"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//expression"/>
+    <genClasses ecoreClass="Delphi.ecore#//simpleExpression"/>
+    <genClasses ecoreClass="Delphi.ecore#//term"/>
+    <genClasses ecoreClass="Delphi.ecore#//factor">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//factor/designator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//factor/expList"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//factor/number"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//factor/string"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//factor/nestedExp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//factor/exp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//factor/setConstuctor"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//factor/typeRef"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//relOp">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//relOp/op"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//addOp">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//addOp/op"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//mulOp">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//mulOp/op"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//designator">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//designator/subpart"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//designator/designator"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//designatorSubPart">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//designatorSubPart/part"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//designatorSubPart/exprList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//designatorPart">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//designatorPart/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//designatorPart/reservedWord"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//designatorPart/id2"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//setConstructor">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//setConstructor/element"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//setElement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//setElement/first"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//setElement/last"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//exprList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exprList/exps"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//stmtList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//stmtList/statments"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//statement">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//statement/labelId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//statement/statement"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//unlabelledStatement"/>
+    <genClasses ecoreClass="Delphi.ecore#//simpleStatement"/>
+    <genClasses ecoreClass="Delphi.ecore#//structStmt"/>
+    <genClasses ecoreClass="Delphi.ecore#//compoundStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//compoundStmt/stamtList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//conditionalStmt"/>
+    <genClasses ecoreClass="Delphi.ecore#//ifStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//ifStmt/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//ifStmt/then"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//ifStmt/else"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//caseStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseStmt/expression"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseStmt/cases"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseStmt/default"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//caseSelector">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseSelector/labels"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseSelector/stmt"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//caseLabel">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseLabel/first"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//caseLabel/last"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//loopStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//loopStmt/stmt"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//loopStmt/condition"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//repeatStmt"/>
+    <genClasses ecoreClass="Delphi.ecore#//whileStmt"/>
+    <genClasses ecoreClass="Delphi.ecore#//forStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//forStmt/varId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//forStmt/varInit"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//withStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//withStmt/vars"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//withStmt/stmt"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//tryStmt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//tryStmt/stmtList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//tryStmt/exception"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//tryStmt/final"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//exceptionBlock">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exceptionBlock/exceptionId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exceptionBlock/type"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exceptionBlock/doStmt"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//exceptionBlock/elseStmts"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//raiseStmt">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//raiseStmt/raise"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//raiseStmt/at"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//assemblerStmt"/>
+    <genClasses ecoreClass="Delphi.ecore#//procedureDeclSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//procedureDeclSection/directive"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//procedureDeclSection/port"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//procedureDeclSection/block"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//procedureDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//procedureDecl/heading"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//functionDecl">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//functionDecl/heading"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//functionHeading">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//functionHeading/type"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//procedureHeading"/>
+    <genClasses ecoreClass="Delphi.ecore#//formalParameters">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//formalParameters/params"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//formalParm">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//formalParm/param"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//parameter">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//parameter/type"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//directive">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//directive/dir"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//directive/messageExp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//objectType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//objectType/heritage"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//objectType/fieldList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//objectType/methodList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//objHeritage">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//objHeritage/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//methodList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//methodList/heading"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//methodList/directive"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//methodHeading">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//methodHeading/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//methodHeading/formalParams"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//constructorHeading"/>
+    <genClasses ecoreClass="Delphi.ecore#//destructorHeading"/>
+    <genClasses ecoreClass="Delphi.ecore#//objFieldList"/>
+    <genClasses ecoreClass="Delphi.ecore#//initSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//initSection/stmtList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//initSection/endStmtList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classType/heritage"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//classType/visibility"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classType/fieldList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classType/methodList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classType/propList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classHeritage"/>
+    <genClasses ecoreClass="Delphi.ecore#//classFieldList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classFieldList/field"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classField">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//classField/visibility"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classField/fieldList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classMethodList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classMethodList/metod"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classMethod">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//classMethod/visibility"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classMethod/methodList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classPropertyList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classPropertyList/property"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//classProperty">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//classProperty/visibility"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//classProperty/propList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//propertyList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyList/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyList/interface"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyList/specifiers"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//propertyList/port"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//propertyInterface">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyInterface/paramList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyInterface/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//propertyParameterList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyParameterList/idList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertyParameterList/typeRef"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//propertySpecifiers">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/index"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/readId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/writeId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/storeId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/storeExp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/defaulExp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//propertySpecifiers/implement"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//interfaceType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//interfaceType/heritage"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//interfaceType/methodList"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//interfaceType/propList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//interfaceHeritage">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//interfaceHeritage/idList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//requiresClause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//requiresClause/idList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//containsClause">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//containsClause/idList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//identList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//identList/type"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//identList/ids"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//qualId">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//qualId/unitId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//qualId/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//typeId">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typeId/unitId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//typeId/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//ident"/>
+    <genClasses ecoreClass="Delphi.ecore#//reservedWord">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//reservedWord/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//constExpr"/>
+    <genClasses ecoreClass="Delphi.ecore#//recordConstExpr">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recordConstExpr/id"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//recordConstExpr/constExp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//unitId">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//unitId/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//relExp">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//relExp/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//relExp/relOp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//relExp/right"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//addExp">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//addExp/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//addExp/addOp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//addExp/right"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//multExp">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//multExp/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//multExp/multOp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//multExp/right"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//simpleFactor"/>
+    <genClasses ecoreClass="Delphi.ecore#//assignmentStmnt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//assignmentStmnt/designator"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//assignmentStmnt/operator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//assignmentStmnt/exp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//callStmnt">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//callStmnt/designator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//callStmnt/args"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//inheritedStamnt"/>
+    <genClasses ecoreClass="Delphi.ecore#//gotoStmnt">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//gotoStmnt/label"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//parameterList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//parameterList/idList"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//parameterSimple">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//parameterSimple/if"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//parameterSimple/initExp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//MultipleId">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//MultipleId/id"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//ReservedId">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//ReservedId/reservedWord"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//MineID">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//MineID/first"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Delphi.ecore#//MineID/second"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//ConstExp">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//ConstExp/exp"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//MultipleConstExp">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//MultipleConstExp/exps"/>
+    </genClasses>
+    <genClasses ecoreClass="Delphi.ecore#//RecordConstExp">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Delphi.ecore#//RecordConstExp/exps"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="Delphi.ecore#//CSTrace">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Delphi.ecore#//CSTrace/ast"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.ocl b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.ocl
new file mode 100644
index 0000000..2f1a94c
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.ocl
@@ -0,0 +1,266 @@
+import  cs : 'Delphi.ecore#/' 
+import  as : 'astm.ecore#/' 
+import 'DelphiHelpers.ocl'
+import 'DelphiLookup.ocl'
+import 'DelphiDisambiguation.ocl'
+package cs
+
+context mainRule
+def : ast() : as::Project =
+as::Project {
+	files = OrderedSet { self.file.ast()} 
+}
+
+context file
+def : ast() : as::CompilationUnit =
+	null -- to be overriden 
+
+context unit
+def : ast() : as::DelphiUnit =
+as::DelphiUnit {
+	name = as::Name {
+				nameString = id.extract()
+			}, 
+language = 'Delphi' , 
+interface = interfaceSect.ast(), 
+implementation = implementationSect.ast(), 
+locationInfo = as::SourceLocation {
+				inSourceFile = as::SourceFile {
+						}
+			} 
+}
+context interfaceSection
+def : ast() : as::DelphiInterfaceSection =
+as::DelphiInterfaceSection {
+	fragments = self.interfaceDecl.getFragments()->asOrderedSet()
+}
+context constantDecl
+def : ast() : as::VariableDefinition =
+as::VariableDefinition {
+	identifierName = as::Name {
+				nameString = id.extract()
+			}, 
+initialValue = const.ast() 
+}
+context implementationSection
+def : ast() : as::DelphiImplementationSection =
+as::DelphiImplementationSection {
+	fragments = self.declSect.getFragments()->asOrderedSet() 
+}
+context labelDeclSection
+def : ast() : as::LabelDefinition =
+as::LabelDefinition {
+	}
+context expression
+def : ast() : as::Expression =
+	null -- to be overriden
+
+context constExpr
+def : ast() : as::Expression =
+	null -- to be overriden
+	
+context ConstExp
+def : ast() : as::Expression =
+exp.ast()
+context MultipleConstExp
+def : ast() : as::Expression =
+exps.ast()->first()
+context RecordConstExp
+def : ast() : as::Expression =
+exps.constExp.ast()->first()
+context typeDecl
+def : ast() : as::TypeDefinition =
+as::TypeDefinition {
+	name = as::Name {
+				nameString = id.extract()
+			} 
+}
+context varDecl
+def : ast() : as::VariableDefinition =
+as::VariableDefinition {
+	identifierName = as::Name {
+				nameString = idList.extract()
+			}, 
+definitionType = self.type.ast(), 
+isMutable = true 
+}
+
+context type
+def : ast() : as::TypeReference =
+	null -- to be overriden
+
+context procedureDecl
+def : ast() : as::FunctionDefinition =
+as::FunctionDefinition {
+	identifierName = as::Name {
+				nameString = heading.id.extract()
+			}, 
+_body = OrderedSet { self.block.ast()} 
+}
+context functionDecl
+def : ast() : as::FunctionDefinition =
+as::FunctionDefinition {
+	identifierName = as::Name {
+				nameString = heading.id.extract()
+			}, 
+_body = OrderedSet { self.block.ast()} 
+}
+context block
+def : ast() : as::DelphiBlockStatement =
+as::DelphiBlockStatement {
+	declarations = declSect->asSequence() ?-> collect(getFragments())->asOrderedSet(), 
+subStatements = OrderedSet { compound.ast()} 
+}
+context statement
+def : ast() : as::Statement =
+self.statement.ast()
+	
+context unlabelledStatement
+def : ast() : as::Statement =
+	null -- to be overriden
+
+context compoundStmt
+def : ast() : as::BlockStatement =
+as::BlockStatement {
+	subStatements = stamtList.statments.ast()->asOrderedSet() 
+}
+context assignmentStmnt
+def : ast() : as::ExpressionStatement =
+as::ExpressionStatement {
+	expression = as::BinaryExpression {
+				leftOperand = self.designator.ast(),
+				operator = as::Assign {
+						},
+				rightOperand = exp.ast()
+			} 
+}
+context callStmnt
+def : ast() : as::ExpressionStatement =
+as::ExpressionStatement {
+	expression = as::FunctionCallExpression {
+				calledFunction = self.designator.ast(),
+				actualParams = args->asSequence() ?-> collect(createActualParams()) ->asOrderedSet()
+			} 
+}
+context withStmt
+def : ast() : as::DelphiWithStatement =
+as::DelphiWithStatement {
+	withs = getDefinitions()->asOrderedSet(), 
+subStatements = OrderedSet { stmt.ast()} 
+}
+context ifStmt
+def : ast() : as::IfStatement =
+as::IfStatement {
+	condition = condition.ast(), 
+thenBody = _then.ast(), 
+elseBody = _else ?. ast() 
+}
+context caseStmt
+def : ast() : as::SwitchStatement =
+as::SwitchStatement {
+	switchExpression = self.expression.ast(), 
+cases = cases.ast()->asOrderedSet() 
+}
+context caseSelector
+def : ast() : as::CaseBlock =
+as::CaseBlock {
+	caseExpressions = labels->collect(x | x.first.ast()->including(x.last.ast()))->asOrderedSet(), 
+_body = OrderedSet { stmt.ast()} 
+}
+context tryStmt
+def : ast() : as::TryStatement =
+as::TryStatement {
+	guardedStatement = as::BlockStatement {
+				subStatements = self.stmtList.statments.ast()->asOrderedSet()
+			}, 
+finalStatement = if final = null then null else final.statments->first().ast() endif, 
+catchBlocks = OrderedSet { exception.ast()} 
+}
+context exceptionBlock
+def : ast() : as::CatchBlock =
+as::CatchBlock {
+	_body = as::BlockStatement {
+				subStatements = self.elseStmts.statments.ast()->asOrderedSet()
+			} 
+}
+context designator
+def : ast() : as::NameReference =
+if isIdentifierRef()
+then as::IdentifierReference {
+	name = as::Name {
+				nameString = subpart.part.extract()
+			}, 
+refersTo = getDefinition() 
+}
+else
+	if isQualifiedOverData()
+	then as::QualifiedOverData {
+		name = as::Name {
+					nameString = subpart.part.extract()
+				}, 
+	member = self.designator.ast().oclAsType(as::IdentifierReference), 
+	refersTo = getDefinition() 
+	}
+	else
+		invalid
+	endif
+endif
+context relExp
+def : ast() : as::BinaryExpression =
+as::BinaryExpression {
+	leftOperand = left.ast(), 
+rightOperand = right.ast(), 
+operator = if self.relOp.op = '='  then as::Equal {
+			} else null endif 
+}
+context multExp
+def : ast() : as::BinaryExpression =
+as::BinaryExpression {
+	leftOperand = left.ast(), 
+operator = as::Multiply {
+			}, 
+rightOperand = right.ast() 
+}
+context addExp
+def : ast() : as::BinaryExpression =
+as::BinaryExpression {
+	leftOperand = left.ast(), 
+operator = astm::Add {
+			}, 
+rightOperand = right.ast() 
+}
+context simpleFactor
+def : ast() : as::Expression =
+self.designator.ast()
+context factor
+def : ast() : as::Expression =
+if isANumber()
+then as::IntegerLiteral {
+	value = number 
+}
+else
+	if isAString()
+	then as::StringLiteral {
+		value = string 
+	}
+	else
+		if isAFunctionCall()
+		then as::DelphiFunctionCallExpression {
+			calledFunction = self.designator.ast(), 
+		actualParams = expList.createActualParams()->asOrderedSet() 
+		}
+		else
+			if isNotExp()
+			then as::UnaryExpression {
+				operator = as::Not {
+						}, 
+			operand = exp.ast() 
+			}
+			else
+				as::NewExpression {
+					}
+			endif
+		endif
+	endif
+endif
+endpackage
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.xtext b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.xtext
new file mode 100644
index 0000000..665e4f1
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Delphi.xtext
@@ -0,0 +1,667 @@
+grammar org.eclipse.qvtd.cs2as.compiler.tests.models.delphi.Delphi hidden(WS, COMMENT, MORECOMMENT, LINE_COMMENT)
+
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+import "http://cs2as/tests/delphi/CS/1.0" as delphi
+
+mainRule returns delphi::mainRule: 
+	file=file // ASBH modified
+	;
+
+file returns delphi::file
+  : (program 
+	| packageDecl 
+	| library 
+	| unit);
+	
+program returns delphi::program:	
+	('program' id=ident ('(' paramsList=identList ')')? ';')? block=programBlock '.'
+	; 
+          
+unit returns delphi::unit:
+	'unit' id=ident (port=portabilityDirective)? ';' interfaceSect=interfaceSection implementationSect=implementationSection initSect=initSection '.'
+	;
+
+packageDecl returns delphi::packageDecl:
+	'package' id=ident ';' (requires=requiresClause)? (contains=containsClause)? 'end' '.'
+	;
+
+library returns delphi::library:
+	'library' id=ident ';' pBlock=programBlock '.'	;
+
+programBlock returns delphi::programBlock:
+	uses=(usesClause)? block=block
+	;  
+
+usesClause returns delphi::usesClause:
+	'uses' idList=identList ';'
+	;
+
+portabilityDirective 
+	: 	'platform'
+    	|	'deprecated'
+    	|	'library'
+	;
+
+interfaceSection returns delphi::interfaceSection: 
+	{delphi::interfaceSection} 'interface' (uses=usesClause)? (interfaceDecl+=interfaceDecl)*
+	;
+
+interfaceDecl returns delphi::interfaceDecl 
+	: 	constSection
+    	|	typeSection
+    	|	varSection
+    	|	exportedHeading
+	;
+
+exportedHeading returns delphi::exportedHeading
+	: 	pHeading=procedureHeading ';' (directive=directive)?
+	| 	fHeading=functionHeading ';' (directive=directive)?
+	;
+
+implementationSection returns delphi::implementationSection 
+	: 	{delphi::implementationSection} 'implementation' (uses=usesClause)? (declSect+=declSection)* (exports+=exportsStmt)*
+	;
+
+block returns delphi::block
+	: 	(declSect=declSection)? (exports+=exportsStmt)* compound=compoundStmt (exports+=exportsStmt)*
+	;
+
+
+exportsItem returns delphi::exportsItem // modified	
+	: {delphi::exportsItem}	id=ident ('name' | 'index'  constExp+=constExpr)? ('index' | 'name' constExp+=constExpr)?
+	;
+exportsStmt returns delphi::exportsStmt
+	: 	'exports' items+=exportsItem (',' items+=exportsItem)*
+	;
+
+
+declSection returns delphi::declSection
+	: 	labelDeclSection
+    	|	constSection
+    	| 	typeSection
+    	| 	varSection
+    	| 	procedureDeclSection
+	;
+
+labelDeclSection returns delphi::labelDeclSection
+	: 	'label' id=labelId
+	;
+
+constSection returns delphi::constSection
+	: {delphi::constSection} 'const' (constantDecl+=constantDecl ';')*
+	;
+
+constantDecl returns delphi::constantDecl
+	: 	id=ident '=' const=constExpr (port=portabilityDirective)?
+    	|	id=ident ':' typeRef=typeId '=' typedConstat=typedConstant (port=portabilityDirective)?
+	;
+
+typeSection returns delphi::typeSection
+	:	{delphi::typeSection} 'type' (typeDecl+=typeDecl ';')*
+	;
+
+typeDecl returns delphi::typeDecl
+	: 	id=ident '=' ('type')? type=type (port=portabilityDirective)?
+	|	id=ident '=' ('type')? restrictedType=restrictedType (port=portabilityDirective)?
+	;
+
+typedConstant returns delphi::typedConstant
+	: 	{delphi::typedConstant}(const=constExpr | array=arrayConstant | record=recordConstant)
+	;
+
+arrayConstant returns delphi::arrayConstant
+	: 	'(' typedConstant=typedConstant ',' ')'
+	;
+
+recordConstant returns delphi::recordConstant 
+	: 	{delphi::recordConstant} '(' (recordField+=recordFieldConstant ';')* ')' 
+	;
+
+recordFieldConstant returns delphi::recordFieldConstant 
+	: 	id=ident ':' typedConstant=typedConstant
+	;
+
+type returns delphi::type
+	: 	typeId
+    	|	simpleType
+   	|	strucType
+    	|	pointerType
+    	|	stringType 
+    	|	procedureType
+   	|	variantType
+    	|	classRefType
+	;
+
+restrictedType returns delphi::restrictedType
+	: 	objectType
+    	|	classType
+    	|	interfaceType
+	;
+
+classRefType returns delphi::classRefType
+	: 	'class' 'of' typeRef=typeId
+	;
+
+simpleType returns delphi::simpleType 
+	: 	ordinalType 
+	| 	realType
+	;
+
+realType returns delphi::realType
+	: {delphi::realType} ( 'real48'
+    	|	'real'
+    	|	'single'
+    	|	'double'
+    	|	'extended'
+    	|	'currency'
+    	|	'comp')
+	;
+
+ordinalType returns delphi::ordinalType
+	: 	subrangeType 
+	| 	enumeratedType 
+	| 	ordIdent
+	;
+
+ordIdent returns delphi::ordIdent
+	: {delphi::ordIdent} (	'shortint'
+    	|	'smallint'
+    	|	'integer'
+    	|	'byte'
+	| 	'longint'
+   	|	'int64'
+    	|	'word'
+    	|	'boolean'
+    	|	'char'
+    	|	'widechar'
+    	|	'longword'
+    	|	'pchar')
+	;
+
+variantType returns delphi::variantType
+	:  {delphi::variantType} ('variant'
+    	|	'olevariant')
+	;
+
+subrangeType returns delphi::subrangeType 
+	: 	first=constExpr '..' last=constExpr
+	;
+
+enumeratedType returns delphi::enumeratedType
+	: {delphi::enumeratedType}	'(' (element+=enumeratedTypeElement ',')* ')'
+	;
+
+enumeratedTypeElement returns delphi::enumeratedTypeElement
+	: 	id=ident ('=' literalExp=constExpr )?
+	;
+
+stringType returns delphi::stringType
+	: 	{delphi::stringType} ('string'
+    	|	'ansistring'
+    	|	'widestring'
+    	|	'string' '(' constExp=constExpr ')')
+	;
+
+strucType returns delphi::strucType
+	: 	('packed')? (arrayType | setType | fileType | recType ('packed')?)
+	;
+
+arrayType returns delphi::arrayType
+	: 	'array' ('[' ordinalType+=ordinalType (',' ordinalTyp+=ordinalType)* ']')? 'of' type=type (port=portabilityDirective)?
+	;
+
+recType returns delphi::recType
+	:  {delphi::recType} 'record' (fields=fieldList)? 'end' (port=portabilityDirective) ?
+	;
+
+fieldList returns delphi::fieldList
+	: 	(field+=fieldDecl ';')+ (variantSect=variantSection)? (';')?
+	;
+
+fieldDecl returns delphi::fieldDecl
+	: 	idList=identList ':' type=type (port=portabilityDirective)?
+	;
+
+variantSection returns delphi::variantSection
+	: 	'case' (id=ident ':')? typeRef=typeId 'of' (recVariants+=recVariant ';')+
+	;
+
+recVariant returns delphi::recVariant
+	: 	constExp+=constExpr ',' (constExp+=constExpr)+ ':' '(' (fieldList=fieldList) ')'
+	;
+
+setType returns delphi::setType
+	: 	'set' 'of' ordinal=ordinalType (port=portabilityDirective)?
+	;
+
+fileType returns delphi::fileType
+	: 	'file' 'of' typeRef=typeId (port=portabilityDirective)?
+	;
+
+pointerType returns delphi::pointerType
+	: 	'^' typeId (portabilityDirective)?
+	;
+
+procedureType returns delphi::procedureType
+	: 	(pHeading=procedureHeading | fHeading=functionHeading) ('of' 'object')?
+	;
+
+varSection returns delphi::varSection
+	: 	'var' (varDecls+=varDecl ';')+
+	;
+
+varDecl returns delphi::varDecl
+	: 	idList=identList ':' type=type (('absolute' (absId=ident | absConst=constExpr)) | '=' absIniti=constExpr)? (portabilityDirective)?
+//	| 	identList ':' type ('absolute' (ident) | '=' constExpr)? (portabilityDirective)?
+	;
+
+expression returns delphi::expression
+	: 	simpleExpression ({delphi::relExp.left=current} relOp=relOp right=simpleExpression)*
+	;
+
+simpleExpression returns delphi::simpleExpression
+	: 	('+' | '-')? term ({delphi::addExp.left=current} addOp=addOp right=term)*
+	;
+
+term returns delphi::term
+	:	factor ({delphi::multExp.left=current}multOp=mulOp right=factor)*
+	;
+
+factor returns delphi::factor
+	:  
+	designator=designator '(' expList=exprList ')'
+	| {delphi::simpleFactor} designator=designator
+   	|	'@' {delphi::simpleFactor} designator=designator
+    	|	number=number
+    	|	string=string
+    	|	{delphi::factor} 'nil'
+    	|	'(' nestedExp=expression ')'
+    	|	'not'  exp= factor
+    	|	setConstuctor=setConstructor
+    	|	typeRef=typeId '(' exp=expression ')'
+	;
+
+relOp returns delphi::relOp
+	: {delphi::relOp} op=('='
+	|	'>'
+    	|	'<'
+    	|	'<='
+    	|	'>='
+    	|	'<>'
+	|	'in'
+    	|	'is'
+    	|	'as')
+	;
+
+addOp returns delphi::addOp
+	: {delphi::addOp} op=('+'
+    	|	'-'
+    	|	'or'
+    	|	'xor')
+	;
+
+mulOp returns delphi::mulOp
+	: {delphi::mulOp} op=('*'
+   	|	'/'
+    	|	'div'
+    	|	'mod'
+    	|	'and'
+    	|	'shl'
+    	|	'shr')
+	;
+
+designator returns delphi::designator
+	:	subpart=designatorSubPart ('.' designator=designator)?
+	;
+
+designatorSubPart returns delphi::designatorSubPart // modified
+	: 	part=designatorPart ( '[' exprList+=exprList ']' | '^')*
+	;
+
+designatorPart returns delphi::designatorPart // modified
+	: 	id=ID 
+	|	'&'reservedWord=reservedWord
+	|	id=ID '(' id2=ID '^' ')' // mine
+	;
+setConstructor returns delphi::setConstructor
+	: 	'[' (element+=setElement (',' element+=setElement)*) ']'
+	;
+
+setElement returns delphi::setElement
+	: 	first=expression ('..' last=expression)?
+	;
+
+exprList returns delphi::exprList
+	: 	exps+=expression (',' exps+=expression)*
+	;
+
+stmtList returns delphi::stmtList
+	: {delphi::stmtList}	(statments+=statement (';')?)*
+	;
+
+statement returns delphi::statement // ASBH modified
+	: 	(labelId=labelId ':')? statement=unlabelledStatement 
+	;
+
+	
+unlabelledStatement returns delphi::unlabelledStatement
+	: simpleStatement | structStmt
+	;
+	
+simpleStatement returns delphi::simpleStatement
+	:	{delphi::assignmentStmnt} designator=designator operator=':=' exp=expression
+	|	{delphi::callStmnt}designator=designator ('(' args=exprList ')')?
+	| 	{delphi::inheritedStamnt} 'inherited'
+	|	{delphi::gotoStmnt}'goto' label=labelId
+	;
+
+structStmt returns delphi::structStmt
+	: 	compoundStmt
+    	|	conditionalStmt
+    	|	loopStmt
+    	|	withStmt
+    	|	tryStmt
+    	|	raiseStmt
+    	|	assemblerStmt
+	;
+
+compoundStmt returns delphi::compoundStmt
+	: 	'begin' stamtList=stmtList 'end'
+	;
+
+conditionalStmt returns delphi::conditionalStmt 
+	: 	ifStmt
+	|	caseStmt
+	;
+
+ifStmt returns delphi::ifStmt 
+	: 	'if' condition=expression 'then' then=statement  (';')? ('else' else=statement  (';')?)?
+	;
+
+caseStmt returns delphi::caseStmt
+	: 	'case' expression=expression 'of' cases+=caseSelector ';' (cases+=caseSelector ';')* ('else' default=stmtList) (';') 'end'
+	;
+
+caseSelector returns delphi::caseSelector
+	: 	labels+=caseLabel (',' labels+=caseLabel)* ':' stmt=statement  (';')?
+	;
+
+caseLabel returns delphi::caseLabel
+	: 	first=constExpr ('..' last=constExpr)?
+	;
+
+loopStmt returns delphi::loopStmt
+	: 	repeatStmt
+	|	whileStmt
+	|	forStmt
+	;
+
+repeatStmt returns delphi::repeatStmt
+	: 	'repeat' stmt=statement  (';')? 'until' condition=expression
+	;
+
+whileStmt returns delphi::whileStmt
+	: 	'while' condition=expression 'do' stmt=statement  (';')?
+	;
+
+forStmt returns delphi::forStmt
+	: 	'for' varId=qualId ':=' varInit=expression ('to' | 'downto') condition=expression 'do' stmt=statement  (';')?
+	;
+
+withStmt returns delphi::withStmt // added simpleStatement
+	: 	'with' vars=identList 'do' stmt=statement (';')? // changed identList by expression
+	;
+
+tryStmt returns delphi::tryStmt // Joined
+	: 	'try' stmtList=stmtList (';')? ('except' exception=exceptionBlock |  'finally' final=stmtList) 'end'
+	;
+
+exceptionBlock returns delphi::exceptionBlock
+	: 	{delphi::exceptionBlock} ('on' (exceptionId+=ident ':')? type+=type'id' 'do' doStmt+=statement (';')?)* (('else')? elseStmts=stmtList )?
+	;
+
+raiseStmt returns delphi::raiseStmt 
+	: 	//'raise' (object)? ('at' address)?
+		{delphi::raiseStmt} 'raise' (raise=ID)? ('at' at=ID)?
+	;
+
+assemblerStmt returns delphi::assemblerStmt
+	: 	{delphi::assemblerStmt} 'asm'
+    //|	<assemblylanguage>
+    //	|	'end'
+	;
+
+procedureDeclSection returns delphi::procedureDeclSection
+	: 	procedureDecl
+    	|	functionDecl
+	;
+
+procedureDecl returns delphi::procedureDecl
+	:	heading=procedureHeading ';' (directive=directive)? (port=portabilityDirective)? block=block ';'
+	;
+
+functionDecl returns delphi::functionDecl
+	: 	heading=functionHeading ';' (directive=directive)? (port=portabilityDirective)? block=block ';'
+	;
+
+functionHeading returns delphi::functionHeading
+	: 	('class')? 'function' id=ident (formalParams=formalParameters)? ':' type=type
+	;
+
+procedureHeading returns delphi::procedureHeading
+	: 	('class')?'procedure' id=ident (formalParams=formalParameters)?
+	;
+
+formalParameters returns delphi::formalParameters
+	: 	'(' (params+=formalParm (';' params+=formalParm)*) ')'
+	;
+
+formalParm returns delphi::formalParm
+	: 	('var' | 'const' | 'out')? param=parameter
+	;
+
+parameter returns delphi::parameter
+	: 	{delphi::parameterList} idList=identList (':' (('array' 'of')? type=type | 'file'))? // changed simpleType by type, deleted string alternative
+	| 	{delphi::parameterSimple} if=ident ':' type=type '=' initExp=constExpr // changed simpleType by type
+	;
+
+directive returns delphi::directive
+	: 	dir='cdecl'
+    	|	dir='register'
+    	|	dir='dynamic'
+    	|	dir='virtual'
+    	|	dir='export'
+    	|	dir='external'
+    	|	dir='near'
+    	|	dir='far'
+    	|	dir='forward'
+	|	dir='message' messageExp=constExpr
+    	|	dir='override'
+    	|	dir='overload'
+   	|	dir='pascal'
+   	|	dir='reintroduce'
+    	|	dir='safecall'
+    	|	dir='stdcall'
+    	|	dir='varargs'
+    	|	dir='local'
+    	|	dir='abstract'
+	;
+
+objectType returns delphi::objectType
+	: 	{delphi::objectType} 'object' (heritage=objHeritage)? (fieldList=objFieldList)? (methodList=methodList)? 'end'
+	;
+
+objHeritage returns delphi::objHeritage
+	: 	'(' id=qualId ')'
+	;
+
+methodList returns delphi::methodList
+	: 	(heading=methodHeading (';' 'virtual')? (';' directive+=directive)*) ';'
+	;
+
+methodHeading returns delphi::methodHeading
+	: 	procedureHeading
+	|	functionHeading
+	|	constructorHeading
+    	|	destructorHeading
+	;
+
+constructorHeading returns delphi::constructorHeading
+	: 	'constructor' id=ident (formalParams=formalParameters)?
+	;
+
+destructorHeading returns delphi::destructorHeading
+	: 	'destructor' id=ident (formalParams=formalParameters)?
+	;
+
+objFieldList returns delphi::objFieldList
+	: 	(identList ':' type=type) ';'
+	;
+
+initSection returns delphi::initSection
+	: 	{delphi::initSection} ('initialization' stmtList=stmtList ('finalization' endStmtList=stmtList)? 'end'
+    	|	'begin' stmtList=stmtList 'end'
+    	|	'end')
+	;
+
+classType returns delphi::classType
+	: 	{delphi::classType} 'class' (heritage=classHeritage)? (visibility=classVisibility)? (fieldList=classFieldList)? (methodList=classMethodList)? (propList=classPropertyList)? 'end'
+	;
+
+classHeritage returns delphi::classHeritage
+	: 	'(' identList ')'
+	;
+
+classVisibility 
+	: 	'public' 
+	| 	'protected' 
+	| 	'private' 
+	| 	'published'
+	;
+
+classFieldList returns delphi::classFieldList
+	: 	field+=classField+
+	;
+
+classField returns delphi::classField
+	:	 visibility=classVisibility? fieldList=objFieldList
+	;
+
+classMethodList returns delphi::classMethodList
+	: 	metod+=classMethod+
+	;
+	
+classMethod returns delphi::classMethod
+	:	visibility=classVisibility? methodList=methodList
+	;
+
+classPropertyList returns delphi::classPropertyList 
+	: 	property+=classProperty+
+	;
+	
+classProperty returns delphi::classProperty
+	:	visibility=classVisibility 
+	|	visibility=classVisibility? propList=propertyList
+	;
+	
+propertyList returns delphi::propertyList
+	: 	'property' id=ident (interface=propertyInterface)? (specifiers=propertySpecifiers)? (port=portabilityDirective)? ';'
+	;
+
+propertyInterface returns delphi::propertyInterface
+	: 	(paramList=propertyParameterList)? ':' id=ident
+	;
+
+propertyParameterList returns delphi::propertyParameterList
+	: 	'[' idList+=identList ':' typeRef+=typeId ';' (idList+=identList ':' typeRef+=typeId ';')* ']' 
+	;
+
+propertySpecifiers returns delphi::propertySpecifiers // Modified constExpr
+	: {delphi::propertySpecifiers} ('index' index=constExpr)? ('read' readId=ident)? ('write' writeId=ident)? ('stored' (storeId=ident | storeExp=constExpr))? (('default' defaulExp=constExpr) | 'nodefault')? ('implements' implement=typeId)?
+	;
+
+interfaceType returns delphi::interfaceType
+	: 	'interface' (heritage=interfaceHeritage) (methodList=classMethodList) (propList+=classPropertyList)* 'end'
+	;
+
+interfaceHeritage returns delphi::interfaceHeritage
+	: 	'(' idList=identList ')'
+	;
+
+requiresClause returns delphi::requiresClause
+	: 	{delphi::requiresClause} 'requires' idList+=identList* ';'
+	;
+
+containsClause returns delphi::containsClause
+	: 	{delphi::containsClause} 'contains' idList+=identList* ';'
+	;
+
+identList returns delphi::identList
+	: 	ids+=ident (',' ids+=ident)*
+	;
+
+qualId returns delphi::qualId
+	: 	(unitId=unitId '.')? id=ident
+	;
+
+typeId returns delphi::typeId //modified
+	: 	(unitId=unitId '.')? id=qualId
+	;
+
+ident returns delphi::ident // modified
+	: 	{delphi::MultipleId} id+=ID ('.' id+=ID)*
+	|	{delphi::ReservedId} '&' reservedWord=reservedWord
+	|	{delphi::MineID} first=ID '(' second=ID '^' ')' // mine
+	;
+
+reservedWord returns delphi::reservedWord
+	: 	id=ID
+	;
+
+// ASBH modified
+constExpr returns delphi::constExpr // modified
+	: {delphi::ConstExp} exp=expression
+	| {delphi::MultipleConstExp} '(' exps+=constExpr (',' exps+=constExpr)*')'
+	| {delphi::RecordConstExp} '(' exps+=recordConstExpr (',' exps+=recordConstExpr)* ')'
+	;
+
+recordConstExpr returns delphi::recordConstExpr
+ // added
+	:	id=ident ':' constExp=constExpr
+	;
+
+unitId returns delphi::unitId
+ // modified
+	: 	id=ID
+	;
+
+labelId  // modified
+	: 	ID
+	|	INT
+	|	HEX
+	;
+
+number 
+	: 	INT
+	|	'#' INT
+	;
+
+string   
+	: 	QVALUE
+	|	DQVALUE
+	;
+
+// Lexer tokens
+terminal SLASH 			:	 '\\';
+terminal QUOTE			:	 '\'';
+terminal ID 			:	 ('a'..'z' | 'A'..'Z' | '_') ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | SLASH | '-')*;
+terminal DOUBLEQUOTE		: 	'"';
+terminal DQVALUE			: 	DOUBLEQUOTE ( !DOUBLEQUOTE )*  DOUBLEQUOTE;
+terminal QVALUE			: 	QUOTE ( !QUOTE )* QUOTE;
+terminal HEX				:	('+' | '-')?  '0' ('x' | 'X') ('0'..'9' | 'a'..'f' | 'A'..'F')+;
+terminal INT returns ecore::EInt			: 	('+' | '-')? ('0'..'9')+;
+terminal COMMENT			:  	 '/*' -> '*/' ;
+terminal MORECOMMENT	:  	 '{' -> '}';
+terminal LINE_COMMENT		: 	'//' !('\n'|'\r')* ('\r'? '\n')? ;
+terminal WS  				:  	(' '|'\r'|'\t'|'\u000C'|'\n');
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiDisambiguation.ocl b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiDisambiguation.ocl
new file mode 100644
index 0000000..94c7c80
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiDisambiguation.ocl
@@ -0,0 +1,21 @@
+import  cs : 'Delphi.ecore#/' 
+import  as : 'astm.ecore' 
+import 'DelphiHelpers.ocl'
+import 'DelphiLookup.ocl'
+package cs
+
+context factor
+def : isANumber() : Boolean =
+	self.number <> null
+def : isAString() : Boolean =
+	self.string <> null
+def : isAFunctionCall() : Boolean =
+	self.expList <> null
+def : isNotExp() : Boolean=
+	self.exp <> null
+context designator
+def : isIdentifierRef() : Boolean =
+	self.designator = null
+def : isQualifiedOverData() : Boolean =
+	self.designator <> null
+endpackage
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiHelpers.ocl b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiHelpers.ocl
new file mode 100644
index 0000000..a2262b9
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiHelpers.ocl
@@ -0,0 +1,51 @@
+import  cs : 'Delphi.ecore#/' 
+import  as : 'astm.ecore#/' 
+package cs
+
+context cs::ident
+def : extract() :String =
+	null
+context cs::MultipleId
+def : extract() :String =
+	id->iterate(x ; acc : String = ''  |
+					if self.id->indexOf(x) = 1 then acc + x else acc + '.'  + x endif)
+context cs::ReservedId
+def : extract() :String =
+	reservedWord.id
+context cs::MineID
+def : extract() :String =
+	first
+context cs::identList
+def : extract() :String =
+	ids->first().extract()
+context cs::designatorPart
+def : extract() :String =
+	id
+context cs::exprList
+def : createActualParams() :Sequence(as::ActualParameterExpression) =
+	self.exps->collect(x | as::ActualParameterExpression {
+				value = x.ast.oclAsType(as::Expression)
+			})
+context cs::interfaceDecl
+def : getFragments() :Sequence(as::DefinitionObject) =
+	Sequence { }
+context cs::declSection
+def : getFragments() :Sequence(as::DefinitionObject) =
+	Sequence { }
+context cs::constSection
+def : getFragments() :Sequence(as::VariableDefinition) =
+	self.constantDecl.ast.oclAsType(as::VariableDefinition)
+context cs::varSection
+def : getFragments() :Sequence(as::VariableDefinition) =
+	self.varDecls.ast.oclAsType(as::VariableDefinition)
+context cs::typeSection
+def : getFragments() :Sequence(as::TypeDefinition) =
+	self.typeDecl.ast.oclAsType(as::TypeDefinition)
+context cs::procedureDecl
+def : getFragments() :Sequence(as::FunctionDefinition) =
+	Sequence { self.ast.oclAsType(as::FunctionDefinition)}
+context cs::functionDecl
+def : getFragments() :Sequence(as::FunctionDefinition) =
+	Sequence { self.ast.oclAsType(as::FunctionDefinition)}
+
+endpackage
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiLookup.ocl b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiLookup.ocl
new file mode 100644
index 0000000..2b3166b
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/DelphiLookup.ocl
@@ -0,0 +1,113 @@
+import  cs : 'Delphi.ecore#/' 
+import  as : 'astm.ecore#/' 
+import 'Lookup.ecore'
+import 'DelphiHelpers.ocl'
+
+package lookup
+-- Some common lookup functionality
+context LookupEnvironment
+def : nestedEnv() : LookupEnvironment[1] =
+	LookupEnvironment {
+		parentEnv = self
+	}
+-- End of common lookup functionality
+endpackage
+
+package as
+
+-- Domain specific default functionality
+context Visitable
+def : unqualified_env_VariableDefinition() : lookup::LookupEnvironment[1] =
+	_unqualified_env_VariableDefinition(null)
+def : unqualified_env_FunctionDefinition() : lookup::LookupEnvironment[1] =
+	_unqualified_env_FunctionDefinition(null)
+
+def : _unqualified_env_VariableDefinition(child : Visitable) : lookup::LookupEnvironment[1] =
+	parentEnv_VariableDefinition()
+def : _unqualified_env_FunctionDefinition(child : Visitable) : lookup::LookupEnvironment[1] =
+	parentEnv_FunctionDefinition()
+
+def : parentEnv_VariableDefinition() : lookup::LookupEnvironment[1] =
+	let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent.oclAsType(Visitable)._unqualified_env_VariableDefinition(self) endif
+def : parentEnv_FunctionDefinition() : lookup::LookupEnvironment[1] =
+	let parent = oclContainer() in if parent = null then lookup::LookupEnvironment { } else parent.oclAsType(Visitable)._unqualified_env_FunctionDefinition(self) endif
+
+
+-- End of domain specific default functionality
+
+context Visitable
+-- VariableDefinition unqualified lookup
+def : _lookupVariableDefinition(env : lookup::LookupEnvironment, vName : String) : OrderedSet(VariableDefinition) =
+let foundVariableDefinition = env.namedElements->selectByKind(VariableDefinition)->select(identifierName.nameString = vName)
+in  if foundVariableDefinition->isEmpty() and not (env.parentEnv = null)
+   then _lookupVariableDefinition(env.parentEnv, vName)
+   else foundVariableDefinition
+   endif
+   
+-- Note: when calling this method, the source element of the argument passed to this method, will be the contextual 
+-- object on which error reports will be handled
+def : _lookupUnqualifiedVariableDefinition(vName : String) : VariableDefinition[?] =
+let foundVariableDefinition = _lookupVariableDefinition(unqualified_env_VariableDefinition(), vName)
+in  if foundVariableDefinition->isEmpty()
+   then null
+   else foundVariableDefinition->first() -- LookupVisitor will report ambiguous result
+   endif
+   
+def : lookupVariableDefinition(vName : String) : VariableDefinition[?] =
+   _lookupUnqualifiedVariableDefinition(vName)
+-- End of VariableDefinition unqualified lookup 
+   
+context Visitable
+-- FunctionDefinition unqualified lookup
+def : _lookupFunctionDefinition(env : lookup::LookupEnvironment, fName : String) : OrderedSet(FunctionDefinition) =
+let foundFunctionDefinition = env.namedElements->selectByKind(FunctionDefinition)->select(identifierName.nameString = fName)
+in  if foundFunctionDefinition->isEmpty() and not (env.parentEnv = null)
+   then _lookupFunctionDefinition(env.parentEnv, fName)
+   else foundFunctionDefinition
+   endif
+   
+-- Note: when calling this method, the source element of the argument passed to this method, will be the contextual 
+-- object on which error reports will be handled
+def : _lookupUnqualifiedFunctionDefinition(fName : String) : FunctionDefinition[?] =
+let foundFunctionDefinition = _lookupFunctionDefinition(unqualified_env_FunctionDefinition(), fName)
+in  if foundFunctionDefinition->isEmpty()
+   then null
+   else foundFunctionDefinition->first() -- LookupVisitor will report ambiguous result
+   endif
+   
+def : lookupFunctionDefinition(fName : String) : FunctionDefinition[?] =
+   _lookupUnqualifiedFunctionDefinition(fName)
+-- End of FunctionDefinition unqualified lookup 
+   
+context CompilationUnit
+def : _unqualified_env_VariableDefinition(child : Visitable) : lookup::LookupEnvironment =
+   parentEnv_VariableDefinition().nestedEnv()
+      .addElements(fragments->selectByKind(VariableDefinition))
+      
+def : _unqualified_env_FunctionDefinition(child : Visitable) : lookup::LookupEnvironment =
+   parentEnv_FunctionDefinition().nestedEnv()
+      .addElements(fragments->selectByKind(FunctionDefinition))
+      
+context DelphiBlockStatement
+def : _unqualified_env_VariableDefinition(child : Visitable) : lookup::LookupEnvironment =
+   parentEnv_VariableDefinition().nestedEnv()
+      .addElements(declarations->selectByKind(VariableDefinition))
+      
+def : _unqualified_env_FunctionDefinition(child : Visitable) : lookup::LookupEnvironment =
+   parentEnv_FunctionDefinition().nestedEnv()
+      .addElements(declarations->selectByKind(FunctionDefinition))
+
+endpackage
+
+package cs
+context cs::designator
+def : getDefinition() : astm::Definition =
+	let method  = ast.oclAsType(astm::NameReference).lookupFunctionDefinition(subpart.part.id)
+	in if method <> null then method else ast.oclAsType(astm::NameReference).lookupVariableDefinition(subpart.part.id) endif
+
+context cs::withStmt
+def : getDefinitions() : Sequence(astm::Definition) =
+	self._vars.ids->collect(x |
+   		let method  = ast.oclAsType(astm::DelphiWithStatement).lookupFunctionDefinition(x.extract())
+		in if method <> null then method else ast.oclAsType(astm::DelphiWithStatement).lookupVariableDefinition(x.extract()) endif)->excluding(null)
+endpackage
\ No newline at end of file
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Lookup.ecore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Lookup.ecore
new file mode 100644
index 0000000..5919814
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Lookup.ecore
@@ -0,0 +1,48 @@
+<?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="lookup" nsURI="http://cs2as/tests/delphi/lookup/1.0" nsPrefix="lookup">
+  <eAnnotations source="http://www.eclipse.org/OCL/Import">
+    <details key="astm" value="platform:/resource/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.ecore#/"/>
+  </eAnnotations>
+  <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+    <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="LookupEnvironment">
+    <eOperations name="addElements" lowerBound="1" eType="#//LookupEnvironment">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="body" value="LookupEnvironment{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;namedElements = namedElements->includingAll(elements),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;parentEnv = parentEnv&#x9;&#xA;&#x9;&#x9;&#x9;&#x9;}"/>
+      </eAnnotations>
+      <eTypeParameters name="NE">
+        <eBounds eClassifier="ecore:EClass astm.ecore#//Definition"/>
+      </eTypeParameters>
+      <eParameters name="elements" lowerBound="1">
+        <eGenericType eClassifier="ecore:EClass platform:/resource/org.eclipse.ocl.pivot/model-gen/oclstdlib.ecore#//Collection">
+          <eTypeArguments eTypeParameter="#//LookupEnvironment/addElements/NE"/>
+        </eGenericType>
+      </eParameters>
+    </eOperations>
+    <eOperations name="addElement" lowerBound="1" eType="#//LookupEnvironment">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot">
+        <details key="body" value="LookupEnvironment {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;namedElements = namedElements->including(element),&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;parentEnv = parentEnv&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}"/>
+      </eAnnotations>
+      <eParameters name="element" eType="ecore:EClass astm.ecore#//Definition"/>
+    </eOperations>
+    <eOperations name="hasFinalResult" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="body" value="throw new &lt;%java.lang.UnsupportedOperationException%>(&quot;Enviroment::hasFinalResult() has been created for CG purposes. Don't call this method&quot;);"/>
+      </eAnnotations>
+    </eOperations>
+    <eOperations name="getExecutor" eType="#//Executor">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="body" value="throw new &lt;%java.lang.UnsupportedOperationException%>(&quot;Enviroment::getEvaluator() has been created for CG purposes. Don't call this method&quot;);"/>
+      </eAnnotations>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="namedElements" upperBound="-1"
+        eType="ecore:EClass astm.ecore#//Definition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parentEnv" eType="#//LookupEnvironment"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Executor" instanceClassName="org.eclipse.ocl.pivot.evaluation.Executor"
+      abstract="true" interface="true"/>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Lookup.genmodel b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Lookup.genmodel
new file mode 100644
index 0000000..35f6096
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/Lookup.genmodel
@@ -0,0 +1,31 @@
+<?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" copyrightText="Copyright (c)  2016 Willink Transformations, Univesity of York and others.&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA;     Adolfo Sanchez-Barbudo Herrera - initial API and implementation"
+    modelDirectory="/org.eclipse.qvtd.cs2as.compiler.tests/emf-gen" modelPluginID="org.eclipse.qvtd.cs2as.compiler.tests"
+    modelName="Lookup" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" copyrightFields="false"
+    usedGenPackages="astm.genmodel#//astm ../../../../../../../../../../org.eclipse.ocl.pivot/model/oclstdlib.genmodel#//oclstdlib"
+    operationReflection="true" importOrganizing="true">
+  <genAnnotations source="http://www.eclipse.org/OCL/GenModel">
+    <details key="Use Delegates" value="false"/>
+    <details key="Use Null Annotations" value="true"/>
+  </genAnnotations>
+  <foreignModel>Lookup.ecore</foreignModel>
+  <genPackages prefix="Lookup" basePackage="astm" disposableProviderFactory="true"
+      ecorePackage="Lookup.ecore#/">
+    <genClasses ecoreClass="Lookup.ecore#//LookupEnvironment">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Lookup.ecore#//LookupEnvironment/namedElements"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Lookup.ecore#//LookupEnvironment/parentEnv"/>
+      <genOperations ecoreOperation="Lookup.ecore#//LookupEnvironment/addElements">
+        <genParameters ecoreParameter="Lookup.ecore#//LookupEnvironment/addElements/elements"/>
+        <genTypeParameters ecoreTypeParameter="Lookup.ecore#//LookupEnvironment/addElements/NE"/>
+      </genOperations>
+      <genOperations ecoreOperation="Lookup.ecore#//LookupEnvironment/addElement">
+        <genParameters ecoreParameter="Lookup.ecore#//LookupEnvironment/addElement/element"/>
+      </genOperations>
+      <genOperations ecoreOperation="Lookup.ecore#//LookupEnvironment/hasFinalResult"/>
+      <genOperations ecoreOperation="Lookup.ecore#//LookupEnvironment/getExecutor"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="Lookup.ecore#//Executor"/>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.ecore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.ecore
new file mode 100644
index 0000000..f4794d9
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.ecore
@@ -0,0 +1,574 @@
+<?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="astm" nsURI="http://cs2as/tests/delphi/AS/1.0" nsPrefix="astm">
+  <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
+    <details key="invocationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="settingDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+    <details key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="DelphiUnit" eSuperTypes="#//CompilationUnit">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//Name" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interface" eType="#//DelphiInterfaceSection"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="implementation" eType="#//DelphiImplementationSection"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DelphiInterfaceSection" eSuperTypes="#//CompilationUnit">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="uses" upperBound="-1" eType="#//NamedTypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DelphiImplementationSection" eSuperTypes="#//CompilationUnit">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="uses" upperBound="-1" eType="#//NamedTypeReference"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exports" upperBound="-1"
+        eType="#//NamedTypeReference" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DelphiBlockStatement" eSuperTypes="#//BlockStatement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exports" upperBound="-1"
+        eType="#//NamedTypeReference" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declarations" upperBound="-1"
+        eType="#//DefinitionObject" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DelphiFunctionCallExpression" eSuperTypes="#//FunctionCallExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applyTo" eType="#//DefinitionObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DelphiWithStatement" eSuperTypes="#//BlockStatement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="withs" upperBound="-1"
+        eType="#//DefinitionObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GASTMObject" eSuperTypes="#//Visitable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="GASTMSourceObject" abstract="true" eSuperTypes="#//Visitable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="GASTMSemanticObject" abstract="true"
+      eSuperTypes="#//Visitable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="OtherSyntaxObject" abstract="true" eSuperTypes="#//GASTMSyntaxObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StorageSpecification" abstract="true"
+      eSuperTypes="#//Visitable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DataType" abstract="true" eSuperTypes="#//Type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AccessKind" eSuperTypes="#//Visitable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="UnaryOperator" abstract="true" eSuperTypes="#//Operator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BinaryOperator" abstract="true" eSuperTypes="#//Operator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ActualParameter" abstract="true" eSuperTypes="#//Visitable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SourceFile" eSuperTypes="#//GASTMSourceObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="pathName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SourceLocation" eSuperTypes="#//GASTMSourceObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startLine" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startColumn" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endLine" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endColumn" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inSourceFile" eType="#//SourceFile"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Project" eSuperTypes="#//GASTMSemanticObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="files" upperBound="-1"
+        eType="#//CompilationUnit" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="outerScope" eType="#//GlobalScope"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Scope" eSuperTypes="#//GASTMSemanticObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitionObject" upperBound="-1"
+        eType="#//DefinitionObject" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="childScope" upperBound="-1"
+        eType="#//Scope" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GASTMSyntaxObject" abstract="true" eSuperTypes="#//GASTMObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="locationInfo" eType="#//SourceLocation"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="preProcessorElements" upperBound="-1"
+        eType="#//PreprocessorElement" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
+        eType="#//AnnotationExpression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CompilationUnit" eSuperTypes="#//OtherSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fragments" upperBound="-1"
+        eType="#//DefinitionObject" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="opensScope" eType="#//ProgramScope"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Name" eSuperTypes="#//OtherSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nameString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeclarationOrDefinition" abstract="true"
+      eSuperTypes="#//DefinitionObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isRegister" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="linkageSpecifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="storageSpecifiers" eType="#//OtherSyntaxObject"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="accessKind" eType="#//OtherSyntaxObject"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Definition" abstract="true" eSuperTypes="#//DeclarationOrDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="identifierName" eType="#//Name"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitionType" eType="#//TypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Declaration" abstract="true" eSuperTypes="#//DeclarationOrDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="defRef" eType="#//Definition"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="identifierName" eType="#//Name"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declarationType" eType="#//TypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionDeclaration" eSuperTypes="#//Declaration">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formalParameters" upperBound="-1"
+        eType="#//FormalParameterDeclaration" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="functionMemberAttributes"
+        eType="#//FunctionMemberAttributes" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="returnType" eType="#//TypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableDeclaration" eSuperTypes="#//Declaration">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMutable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition" eSuperTypes="#//Definition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="returnType" eType="#//TypeReference"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formalParameters" upperBound="-1"
+        eType="#//FormalParameterDefinition" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" upperBound="-1" eType="#//Statement"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="functionMemberAttributes"
+        eType="#//FunctionMemberAttributes" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="opensScope" eType="#//FunctionScope"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionMemberAttributes" eSuperTypes="#//Visitable">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isFriend" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isInline" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isThisConst" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="virtualSpecifier" eType="#//VirtualSpecification"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EntryDefinition" eSuperTypes="#//Definition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formalParameters" upperBound="-1"
+        eType="#//FormalParameterDefinition" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" upperBound="-1" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DataDefinition" abstract="true" eSuperTypes="#//Definition">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMutable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initialValue" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BitFieldDefinition" eSuperTypes="#//DataDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="bitFieldSize" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EnumLiteralDefinition" eSuperTypes="#//Definition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeDefinition" eSuperTypes="#//DefinitionObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//Name" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedTypeDefinition" eSuperTypes="#//TypeDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitionType" eType="#//NamedType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregateTypeDefinition" eSuperTypes="#//TypeDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="aggregateType" eType="#//AggregateType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NameSpaceDefinition" eSuperTypes="#//DefinitionObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nameSpace" eType="#//Name"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" upperBound="-1" eType="#//DefinitionObject"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nameSpaceType" eType="#//NameSpaceType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LabelDefinition" eSuperTypes="#//DefinitionObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="labelName" eType="#//Name"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="labelType" eType="#//LabelType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IncludeUnit" eSuperTypes="#//PreprocessorElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="file" eType="#//SourceFile"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MacroCall" eSuperTypes="#//PreprocessorElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersTo" eType="#//MacroDefinition"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MacroDefinition" eSuperTypes="#//PreprocessorElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="macroName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="body" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Comment" eSuperTypes="#//PreprocessorElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//GASTMSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isConst" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isVolatile" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PrimitiveType" abstract="true" eSuperTypes="#//DataType">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSigned" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EnumType" eSuperTypes="#//DataType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enumLiterals" upperBound="-1"
+        eType="#//EnumLiteralDefinition" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ConstructedType" abstract="true" eSuperTypes="#//DataType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="baseType" eType="#//TypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregateType" abstract="true" eSuperTypes="#//DataType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="members" upperBound="-1"
+        eType="#//DefinitionObject" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="opensScope" eType="#//AggregateScope"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArrayType" eSuperTypes="#//ConstructedType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ranks" upperBound="-1"
+        eType="#//Dimension" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Dimension" eSuperTypes="#//OtherSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="lowBound" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="highBound" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionType" eSuperTypes="#//Type">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="returnType" eType="#//TypeReference"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameterTypes" upperBound="-1"
+        eType="#//FormalParameterType" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FormalParameterType" abstract="true"
+      eSuperTypes="#//DataType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//TypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedType" eSuperTypes="#//DataType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Type" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ClassType" eSuperTypes="#//AggregateType">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="derivesFrom" upperBound="-1"
+        eType="#//DerivesFrom" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DerivesFrom" eSuperTypes="#//OtherSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isVirtual" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="accessKind" eType="#//OtherSyntaxObject"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="className" eType="#//NamedType"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="UnnamedTypeReference" eSuperTypes="#//TypeReference">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedTypeReference" eSuperTypes="#//TypeReference">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//Name" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//TypeDefinition"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeleteStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeclarationOrDefinitionStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="declOrDefn" eType="#//DefinitionObject"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ExpressionStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="JumpStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//LabelAccess"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ContinueStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//LabelAccess"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LabeledStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="label" eType="#//LabelDefinition"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="statement" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subStatements" upperBound="-1"
+        eType="#//Statement" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="opensScope" eType="#//BlockScope"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EmptyStatement" eSuperTypes="#//Statement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="thenBody" eType="#//Statement"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elseBody" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SwitchStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="switchExpression" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cases" upperBound="-1"
+        eType="#//SwitchCase" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SwitchCase" eSuperTypes="#//OtherSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" upperBound="-1" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CaseBlock" eSuperTypes="#//SwitchCase">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="caseExpressions" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="returnValue" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LoopStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ForStatement" abstract="true" eSuperTypes="#//LoopStatement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initBody" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="iterationBody" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TryStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="guardedStatement" eType="#//Statement"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="catchBlocks" upperBound="-1"
+        eType="#//CatchBlock" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="finalStatement" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CatchBlock" eSuperTypes="#//OtherSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypesCatchBlock" eSuperTypes="#//CatchBlock">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exceptions" upperBound="-1"
+        eType="#//Type" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableCatchBlock" eSuperTypes="#//CatchBlock">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exceptionVariable" eType="#//DataDefinition"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ThrowStatement" eSuperTypes="#//Statement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exception" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true" eSuperTypes="#//GASTMSyntaxObject">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expressionType" eType="#//TypeReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NameReference" abstract="true" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//Name" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersTo" eType="#//DefinitionObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArrayAccess" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="arrayName" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subscripts" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="QualifiedIdentifierReference" abstract="true"
+      eSuperTypes="#//NameReference">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="qualifiers" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="member" eType="#//IdentifierReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeQualifiedIdentifierReference" eSuperTypes="#//NameReference">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="aggregateType" upperBound="-1"
+        eType="#//TypeReference" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="member" eType="#//IdentifierReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Literal" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CastExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="castType" eType="#//TypeReference"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="UnaryExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operator" eType="#//OtherSyntaxObject"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BinaryExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operator" eType="#//OtherSyntaxObject"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OperatorAssign" eSuperTypes="#//BinaryOperator">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operator" eType="#//OtherSyntaxObject"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ConditionalExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="onTrueOperand" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="onFalseOperand" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RangeExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fromExpression" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="toExpression" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionCallExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="calledFunction" eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="actualParams" upperBound="-1"
+        eType="#//ActualParameter" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ActualParameterExpression" eSuperTypes="#//ActualParameter">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NewExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="newType" eType="#//TypeReference"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="actualParams" upperBound="-1"
+        eType="#//OtherSyntaxObject" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LabelAccess" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="name" eType="#//Name" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definition" eType="#//LabelDefinition"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AnnotationExpression" eSuperTypes="#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="annotationType" eType="#//TypeReference"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="memberValues" upperBound="-1"
+        eType="#//Expression" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GlobalScope" eSuperTypes="#//Scope"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PreprocessorElement" abstract="true"
+      eSuperTypes="#//GASTMSyntaxObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DefinitionObject" abstract="true" eSuperTypes="#//GASTMSyntaxObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ProgramScope" eSuperTypes="#//Scope"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeReference" abstract="true" eSuperTypes="#//Type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Statement" abstract="true" eSuperTypes="#//GASTMSyntaxObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionScope" eSuperTypes="#//Scope"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NameSpaceType" eSuperTypes="#//Type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="LabelType" eSuperTypes="#//Type"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregateScope" eSuperTypes="#//Scope"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BlockScope" eSuperTypes="#//Scope"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IdentifierReference" eSuperTypes="#//NameReference"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FormalParameterDefinition" eSuperTypes="#//DataDefinition"/>
+  <eClassifiers xsi:type="ecore:EClass" name="VirtualSpecification" abstract="true"
+      eSuperTypes="#//OtherSyntaxObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FormalParameterDeclaration" eSuperTypes="#//Declaration"/>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableDefinition" eSuperTypes="#//DataDefinition"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionMemberAttribute" eSuperTypes="#//OtherSyntaxObject"/>
+  <eClassifiers xsi:type="ecore:EClass" name="External" eSuperTypes="#//StorageSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionPersistent" eSuperTypes="#//StorageSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FileLocal" eSuperTypes="#//StorageSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PerClassMember" eSuperTypes="#//StorageSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NoDef" eSuperTypes="#//StorageSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Virtual" eSuperTypes="#//VirtualSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PureVirtual" eSuperTypes="#//VirtualSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NonVirtual" eSuperTypes="#//VirtualSpecification"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ExceptionType" eSuperTypes="#//DataType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Void" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Byte" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ShortInteger" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Integer" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="LongInteger" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Float" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Double" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="LongDouble" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Character" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="String" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Boolean" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="WideCharacter" eSuperTypes="#//PrimitiveType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionType" eSuperTypes="#//ConstructedType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PointerType" eSuperTypes="#//ConstructedType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ReferenceType" eSuperTypes="#//ConstructedType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RangeType" eSuperTypes="#//ConstructedType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StructureType" eSuperTypes="#//AggregateType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="UnionType" eSuperTypes="#//AggregateType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AnnotationType" eSuperTypes="#//AggregateType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ByValueFormalParameterType" eSuperTypes="#//FormalParameterType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ByReferenceFormalParameterType" eSuperTypes="#//FormalParameterType"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Public" eSuperTypes="#//AccessKind"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Protected" eSuperTypes="#//AccessKind"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Private" eSuperTypes="#//AccessKind"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TerminateStatement" eSuperTypes="#//Statement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DefaultBlock" eSuperTypes="#//SwitchCase"/>
+  <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//LoopStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DoWhileStatement" eSuperTypes="#//LoopStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ForCheckBeforeStatement" eSuperTypes="#//ForStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ForCheckAfterStatement" eSuperTypes="#//ForStatement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregateExpression" eSuperTypes="#//Expression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="QualifiedOverPointer" eSuperTypes="#//QualifiedIdentifierReference"/>
+  <eClassifiers xsi:type="ecore:EClass" name="QualifiedOverData" eSuperTypes="#//QualifiedIdentifierReference"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegerLiteral" eSuperTypes="#//Literal"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StringLiteral" eSuperTypes="#//Literal"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CharLiteral" eSuperTypes="#//Literal"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RealLiteral" eSuperTypes="#//Literal"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteral" eSuperTypes="#//Literal"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitLiteral" eSuperTypes="#//Literal"/>
+  <eClassifiers xsi:type="ecore:EClass" name="UnaryPlus" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Negate" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Not" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitNot" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AddressOf" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Deref" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Increment" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Decrement" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PostIncrement" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PostDecrement" eSuperTypes="#//UnaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Add" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Subtract" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Multiply" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Divide" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Modulus" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Exponent" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="And" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Or" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Equal" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NotEqual" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Greater" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NotGreater" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Less" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NotLess" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitAnd" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitOr" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitXor" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitLeftShift" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="BitRightShift" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Assign" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="MissingActualParameter" eSuperTypes="#//ActualParameter"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ByValueActualParameterExpression" eSuperTypes="#//ActualParameterExpression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ByReferenceActualParameterExpression"
+      eSuperTypes="#//ActualParameterExpression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificTriggerDefinition" eSuperTypes="#//Definition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="body" upperBound="-1" eType="#//Statement"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificLessEqual" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificGreaterEqual" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificIn" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificLike" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificConcatString" eSuperTypes="#//BinaryOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SpecificSelectStatement" eSuperTypes="#//Statement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Visitable" instanceClassName="astm.util.Visitable"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Operator" eSuperTypes="#//OtherSyntaxObject"/>
+</ecore:EPackage>
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.genmodel b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.genmodel
new file mode 100644
index 0000000..923c6bf
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/delphi/astm.genmodel
@@ -0,0 +1,457 @@
+<?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" copyrightText="Copyright (c)  2016 Willink Transformations, Univesity of York and others.&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA;     Adolfo Sanchez-Barbudo Herrera - initial API and implementation"
+    modelDirectory="/org.eclipse.qvtd.cs2as.compiler.tests/emf-gen" modelPluginID="org.eclipse.qvtd.cs2as.compiler.tests"
+    modelName="Astm" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    importerID="org.eclipse.emf.importer.ecore" bundleManifest="false" complianceLevel="8.0"
+    copyrightFields="false" operationReflection="true" importOrganizing="true">
+  <genAnnotations source="http://www.eclipse.org/OCL/GenModel">
+    <details key="Use Delegates" value="false"/>
+    <details key="Use Null Annotations" value="true"/>
+  </genAnnotations>
+  <genAnnotations source="http://www.eclipse.org/OCL/GenModel/Visitor">
+    <details key="Root Visitor Class" value="astm.util.Visitor"/>
+    <details key="Visitable Interface" value="astm.util.Visitable"/>
+  </genAnnotations>
+  <foreignModel>astm.ecore</foreignModel>
+  <genPackages prefix="Astm" disposableProviderFactory="true" ecorePackage="astm.ecore#/">
+    <genClasses ecoreClass="astm.ecore#//DelphiUnit">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiUnit/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiUnit/interface"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiUnit/implementation"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DelphiInterfaceSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiInterfaceSection/uses"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DelphiImplementationSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiImplementationSection/uses"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiImplementationSection/exports"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DelphiBlockStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiBlockStatement/exports"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiBlockStatement/declarations"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DelphiFunctionCallExpression">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiFunctionCallExpression/applyTo"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DelphiWithStatement">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference astm.ecore#//DelphiWithStatement/withs"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//GASTMObject"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//GASTMSourceObject"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//GASTMSemanticObject"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//OtherSyntaxObject"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//StorageSpecification"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//DataType"/>
+    <genClasses ecoreClass="astm.ecore#//AccessKind"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//UnaryOperator"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//BinaryOperator"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//ActualParameter"/>
+    <genClasses ecoreClass="astm.ecore#//SourceFile">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//SourceFile/pathName"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//SourceLocation">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//SourceLocation/startLine"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//SourceLocation/startColumn"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//SourceLocation/endLine"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//SourceLocation/endColumn"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//SourceLocation/inSourceFile"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//Project">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Project/files"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Project/outerScope"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//Scope">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Scope/definitionObject"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Scope/childScope"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//GASTMSyntaxObject">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//GASTMSyntaxObject/locationInfo"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//GASTMSyntaxObject/preProcessorElements"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//GASTMSyntaxObject/annotations"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//CompilationUnit">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//CompilationUnit/language"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//CompilationUnit/fragments"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//CompilationUnit/opensScope"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//Name">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//Name/nameString"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//DeclarationOrDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//DeclarationOrDefinition/isRegister"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//DeclarationOrDefinition/linkageSpecifier"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DeclarationOrDefinition/storageSpecifiers"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DeclarationOrDefinition/accessKind"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//Definition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Definition/identifierName"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Definition/definitionType"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//Declaration">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Declaration/defRef"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Declaration/identifierName"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Declaration/declarationType"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//FunctionDeclaration">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDeclaration/formalParameters"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDeclaration/functionMemberAttributes"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDeclaration/returnType"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//VariableDeclaration">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//VariableDeclaration/isMutable"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//FunctionDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDefinition/returnType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDefinition/formalParameters"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDefinition/body"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDefinition/functionMemberAttributes"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionDefinition/opensScope"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//FunctionMemberAttributes">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//FunctionMemberAttributes/isFriend"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//FunctionMemberAttributes/isInline"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//FunctionMemberAttributes/isThisConst"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionMemberAttributes/virtualSpecifier"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//EntryDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//EntryDefinition/formalParameters"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//EntryDefinition/body"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//DataDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//DataDefinition/isMutable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DataDefinition/initialValue"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//BitFieldDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BitFieldDefinition/bitFieldSize"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//EnumLiteralDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//EnumLiteralDefinition/value"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//TypeDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TypeDefinition/name"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//NamedTypeDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NamedTypeDefinition/definitionType"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//AggregateTypeDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//AggregateTypeDefinition/aggregateType"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//NameSpaceDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NameSpaceDefinition/nameSpace"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NameSpaceDefinition/body"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NameSpaceDefinition/nameSpaceType"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//LabelDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LabelDefinition/labelName"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LabelDefinition/labelType"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//IncludeUnit">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//IncludeUnit/file"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//MacroCall">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//MacroCall/refersTo"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//MacroDefinition">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//MacroDefinition/macroName"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//MacroDefinition/body"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//Comment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//Comment/text"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//Type">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//Type/isConst"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//Type/isVolatile"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//PrimitiveType">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//PrimitiveType/isSigned"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//EnumType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//EnumType/enumLiterals"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//ConstructedType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ConstructedType/baseType"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//AggregateType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//AggregateType/members"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//AggregateType/opensScope"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ArrayType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ArrayType/ranks"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//Dimension">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Dimension/lowBound"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Dimension/highBound"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//FunctionType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionType/returnType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionType/parameterTypes"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//FormalParameterType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FormalParameterType/type"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//NamedType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NamedType/body"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ClassType">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ClassType/derivesFrom"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DerivesFrom">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//DerivesFrom/isVirtual"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DerivesFrom/accessKind"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DerivesFrom/className"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//UnnamedTypeReference">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//UnnamedTypeReference/type"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//NamedTypeReference">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NamedTypeReference/name"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference astm.ecore#//NamedTypeReference/type"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DeleteStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DeleteStatement/operand"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//DeclarationOrDefinitionStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//DeclarationOrDefinitionStatement/declOrDefn"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ExpressionStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ExpressionStatement/expression"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//JumpStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//JumpStatement/target"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//BreakStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BreakStatement/target"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ContinueStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ContinueStatement/target"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//LabeledStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LabeledStatement/label"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LabeledStatement/statement"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//BlockStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BlockStatement/subStatements"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BlockStatement/opensScope"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//EmptyStatement"/>
+    <genClasses ecoreClass="astm.ecore#//IfStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//IfStatement/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//IfStatement/thenBody"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//IfStatement/elseBody"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//SwitchStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//SwitchStatement/switchExpression"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//SwitchStatement/cases"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//SwitchCase">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//SwitchCase/body"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//CaseBlock">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//CaseBlock/caseExpressions"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ReturnStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ReturnStatement/returnValue"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//LoopStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LoopStatement/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LoopStatement/body"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//ForStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ForStatement/initBody"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ForStatement/iterationBody"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//TryStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TryStatement/guardedStatement"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TryStatement/catchBlocks"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TryStatement/finalStatement"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//CatchBlock">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//CatchBlock/body"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//TypesCatchBlock">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TypesCatchBlock/exceptions"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//VariableCatchBlock">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//VariableCatchBlock/exceptionVariable"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ThrowStatement">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ThrowStatement/exception"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//Expression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//Expression/expressionType"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//NameReference">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NameReference/name"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference astm.ecore#//NameReference/refersTo"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ArrayAccess">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ArrayAccess/arrayName"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ArrayAccess/subscripts"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="astm.ecore#//QualifiedIdentifierReference">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//QualifiedIdentifierReference/qualifiers"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//QualifiedIdentifierReference/member"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//TypeQualifiedIdentifierReference">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TypeQualifiedIdentifierReference/aggregateType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//TypeQualifiedIdentifierReference/member"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//Literal">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute astm.ecore#//Literal/value"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//CastExpression">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference astm.ecore#//CastExpression/castType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//CastExpression/expression"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//UnaryExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//UnaryExpression/operator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//UnaryExpression/operand"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//BinaryExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BinaryExpression/operator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BinaryExpression/leftOperand"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//BinaryExpression/rightOperand"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//OperatorAssign">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//OperatorAssign/operator"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ConditionalExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ConditionalExpression/condition"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ConditionalExpression/onTrueOperand"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ConditionalExpression/onFalseOperand"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//RangeExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//RangeExpression/fromExpression"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//RangeExpression/toExpression"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//FunctionCallExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionCallExpression/calledFunction"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//FunctionCallExpression/actualParams"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//ActualParameterExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//ActualParameterExpression/value"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//NewExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NewExpression/newType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//NewExpression/actualParams"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//LabelAccess">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LabelAccess/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//LabelAccess/definition"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//AnnotationExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//AnnotationExpression/annotationType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//AnnotationExpression/memberValues"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//GlobalScope"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//PreprocessorElement"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//DefinitionObject"/>
+    <genClasses ecoreClass="astm.ecore#//ProgramScope"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//TypeReference"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//Statement"/>
+    <genClasses ecoreClass="astm.ecore#//FunctionScope"/>
+    <genClasses ecoreClass="astm.ecore#//NameSpaceType"/>
+    <genClasses ecoreClass="astm.ecore#//LabelType"/>
+    <genClasses ecoreClass="astm.ecore#//AggregateScope"/>
+    <genClasses ecoreClass="astm.ecore#//BlockScope"/>
+    <genClasses ecoreClass="astm.ecore#//IdentifierReference"/>
+    <genClasses ecoreClass="astm.ecore#//FormalParameterDefinition"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//VirtualSpecification"/>
+    <genClasses ecoreClass="astm.ecore#//FormalParameterDeclaration"/>
+    <genClasses ecoreClass="astm.ecore#//VariableDefinition"/>
+    <genClasses ecoreClass="astm.ecore#//FunctionMemberAttribute"/>
+    <genClasses ecoreClass="astm.ecore#//External"/>
+    <genClasses ecoreClass="astm.ecore#//FunctionPersistent"/>
+    <genClasses ecoreClass="astm.ecore#//FileLocal"/>
+    <genClasses ecoreClass="astm.ecore#//PerClassMember"/>
+    <genClasses ecoreClass="astm.ecore#//NoDef"/>
+    <genClasses ecoreClass="astm.ecore#//Virtual"/>
+    <genClasses ecoreClass="astm.ecore#//PureVirtual"/>
+    <genClasses ecoreClass="astm.ecore#//NonVirtual"/>
+    <genClasses ecoreClass="astm.ecore#//ExceptionType"/>
+    <genClasses ecoreClass="astm.ecore#//Void"/>
+    <genClasses ecoreClass="astm.ecore#//Byte"/>
+    <genClasses ecoreClass="astm.ecore#//ShortInteger"/>
+    <genClasses ecoreClass="astm.ecore#//Integer"/>
+    <genClasses ecoreClass="astm.ecore#//LongInteger"/>
+    <genClasses ecoreClass="astm.ecore#//Float"/>
+    <genClasses ecoreClass="astm.ecore#//Double"/>
+    <genClasses ecoreClass="astm.ecore#//LongDouble"/>
+    <genClasses ecoreClass="astm.ecore#//Character"/>
+    <genClasses ecoreClass="astm.ecore#//String"/>
+    <genClasses ecoreClass="astm.ecore#//Boolean"/>
+    <genClasses ecoreClass="astm.ecore#//WideCharacter"/>
+    <genClasses ecoreClass="astm.ecore#//CollectionType"/>
+    <genClasses ecoreClass="astm.ecore#//PointerType"/>
+    <genClasses ecoreClass="astm.ecore#//ReferenceType"/>
+    <genClasses ecoreClass="astm.ecore#//RangeType"/>
+    <genClasses ecoreClass="astm.ecore#//StructureType"/>
+    <genClasses ecoreClass="astm.ecore#//UnionType"/>
+    <genClasses ecoreClass="astm.ecore#//AnnotationType"/>
+    <genClasses ecoreClass="astm.ecore#//ByValueFormalParameterType"/>
+    <genClasses ecoreClass="astm.ecore#//ByReferenceFormalParameterType"/>
+    <genClasses ecoreClass="astm.ecore#//Public"/>
+    <genClasses ecoreClass="astm.ecore#//Protected"/>
+    <genClasses ecoreClass="astm.ecore#//Private"/>
+    <genClasses ecoreClass="astm.ecore#//TerminateStatement"/>
+    <genClasses ecoreClass="astm.ecore#//DefaultBlock"/>
+    <genClasses ecoreClass="astm.ecore#//WhileStatement"/>
+    <genClasses ecoreClass="astm.ecore#//DoWhileStatement"/>
+    <genClasses ecoreClass="astm.ecore#//ForCheckBeforeStatement"/>
+    <genClasses ecoreClass="astm.ecore#//ForCheckAfterStatement"/>
+    <genClasses ecoreClass="astm.ecore#//AggregateExpression"/>
+    <genClasses ecoreClass="astm.ecore#//QualifiedOverPointer"/>
+    <genClasses ecoreClass="astm.ecore#//QualifiedOverData"/>
+    <genClasses ecoreClass="astm.ecore#//IntegerLiteral"/>
+    <genClasses ecoreClass="astm.ecore#//StringLiteral"/>
+    <genClasses ecoreClass="astm.ecore#//CharLiteral"/>
+    <genClasses ecoreClass="astm.ecore#//RealLiteral"/>
+    <genClasses ecoreClass="astm.ecore#//BooleanLiteral"/>
+    <genClasses ecoreClass="astm.ecore#//BitLiteral"/>
+    <genClasses ecoreClass="astm.ecore#//UnaryPlus"/>
+    <genClasses ecoreClass="astm.ecore#//Negate"/>
+    <genClasses ecoreClass="astm.ecore#//Not"/>
+    <genClasses ecoreClass="astm.ecore#//BitNot"/>
+    <genClasses ecoreClass="astm.ecore#//AddressOf"/>
+    <genClasses ecoreClass="astm.ecore#//Deref"/>
+    <genClasses ecoreClass="astm.ecore#//Increment"/>
+    <genClasses ecoreClass="astm.ecore#//Decrement"/>
+    <genClasses ecoreClass="astm.ecore#//PostIncrement"/>
+    <genClasses ecoreClass="astm.ecore#//PostDecrement"/>
+    <genClasses ecoreClass="astm.ecore#//Add"/>
+    <genClasses ecoreClass="astm.ecore#//Subtract"/>
+    <genClasses ecoreClass="astm.ecore#//Multiply"/>
+    <genClasses ecoreClass="astm.ecore#//Divide"/>
+    <genClasses ecoreClass="astm.ecore#//Modulus"/>
+    <genClasses ecoreClass="astm.ecore#//Exponent"/>
+    <genClasses ecoreClass="astm.ecore#//And"/>
+    <genClasses ecoreClass="astm.ecore#//Or"/>
+    <genClasses ecoreClass="astm.ecore#//Equal"/>
+    <genClasses ecoreClass="astm.ecore#//NotEqual"/>
+    <genClasses ecoreClass="astm.ecore#//Greater"/>
+    <genClasses ecoreClass="astm.ecore#//NotGreater"/>
+    <genClasses ecoreClass="astm.ecore#//Less"/>
+    <genClasses ecoreClass="astm.ecore#//NotLess"/>
+    <genClasses ecoreClass="astm.ecore#//BitAnd"/>
+    <genClasses ecoreClass="astm.ecore#//BitOr"/>
+    <genClasses ecoreClass="astm.ecore#//BitXor"/>
+    <genClasses ecoreClass="astm.ecore#//BitLeftShift"/>
+    <genClasses ecoreClass="astm.ecore#//BitRightShift"/>
+    <genClasses ecoreClass="astm.ecore#//Assign"/>
+    <genClasses ecoreClass="astm.ecore#//MissingActualParameter"/>
+    <genClasses ecoreClass="astm.ecore#//ByValueActualParameterExpression"/>
+    <genClasses ecoreClass="astm.ecore#//ByReferenceActualParameterExpression"/>
+    <genClasses ecoreClass="astm.ecore#//SpecificTriggerDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference astm.ecore#//SpecificTriggerDefinition/body"/>
+    </genClasses>
+    <genClasses ecoreClass="astm.ecore#//SpecificLessEqual"/>
+    <genClasses ecoreClass="astm.ecore#//SpecificGreaterEqual"/>
+    <genClasses ecoreClass="astm.ecore#//SpecificIn"/>
+    <genClasses ecoreClass="astm.ecore#//SpecificLike"/>
+    <genClasses ecoreClass="astm.ecore#//SpecificConcatString"/>
+    <genClasses ecoreClass="astm.ecore#//SpecificSelectStatement"/>
+    <genClasses image="false" ecoreClass="astm.ecore#//Visitable"/>
+    <genClasses ecoreClass="astm.ecore#//Operator"/>
+  </genPackages>
+</genmodel:GenModel>