[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.
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 - 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{
						namedElements = namedElements->includingAll(elements),
						parentEnv = parentEnv	
				}"/>
+ </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 {
						namedElements = namedElements->including(element),
						parentEnv = parentEnv
					}"/>
+ </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 <%java.lang.UnsupportedOperationException%>("Enviroment::hasFinalResult() has been created for CG purposes. Don't call this method");"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="getExecutor" eType="#//Executor">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="body" value="throw new <%java.lang.UnsupportedOperationException%>("Enviroment::getEvaluator() has been created for CG purposes. Don't call this method");"/>
+ </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.
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 - 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.
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 - 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>