[ocl] - Updating papers models
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore b/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore
index 01f70d9..db0df88 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore
+++ b/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore
@@ -1,52 +1,52 @@
-<?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="oclAS">
- <eClassifiers xsi:type="ecore:EClass" name="LetExp" eSuperTypes="#//OclExpression">
- <eStructuralFeatures xsi:type="ecore:EReference" name="in" lowerBound="1" eType="#//OclExpression"
- containment="true"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"
- eType="#//Variable" containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Variable" eSuperTypes="#//TypedElement">
- <eStructuralFeatures xsi:type="ecore:EReference" name="initExpression" eType="#//OclExpression"
- containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="OclExpression" abstract="true" eSuperTypes="#//TypedElement"/>
- <eClassifiers xsi:type="ecore:EClass" name="VariableExp" eSuperTypes="#//OclExpression">
- <eStructuralFeatures xsi:type="ecore:EReference" name="referredVariable" lowerBound="1"
- eType="#//Variable"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionRange" eSuperTypes="#//OclExpression #//CollectionLiteralPart">
- <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpression"
- containment="true"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpression"
- containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionItem" eSuperTypes="#//CollectionLiteralPart">
- <eStructuralFeatures xsi:type="ecore:EReference" name="item" lowerBound="1" eType="#//OclExpression"
- containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPart" abstract="true"
- eSuperTypes="#//TypedElement"/>
- <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//OclExpression">
- <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpression"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//String"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" eSuperTypes="#//NamedElement">
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="PropertyCallExp" eSuperTypes="#//OclExpression">
- <eStructuralFeatures xsi:type="ecore:EReference" name="referredProperty" lowerBound="1"
- eType="#//Property"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="Property">
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExp">
- <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
- eType="#//CollectionLiteralPart" containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EDataType" name="String"/>
-</ecore:EPackage>
+<?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="oclAS">
+ <eClassifiers xsi:type="ecore:EClass" name="LetExp" eSuperTypes="#//OclExpression">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="in" lowerBound="1" eType="#//OclExpression"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"
+ eType="#//Variable" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Variable" eSuperTypes="#//TypedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="initExpression" eType="#//OclExpression"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OclExpression" abstract="true" eSuperTypes="#//TypedElement"/>
+ <eClassifiers xsi:type="ecore:EClass" name="VariableExp" eSuperTypes="#//OclExpression">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referredVariable" lowerBound="1"
+ eType="#//Variable"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionRange" eSuperTypes="#//OclExpression #//CollectionLiteralPart">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpression"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpression"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionItem" eSuperTypes="#//CollectionLiteralPart">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="item" lowerBound="1" eType="#//OclExpression"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPart" abstract="true"
+ eSuperTypes="#//TypedElement"/>
+ <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//OclExpression">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpression"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyCallExp" eSuperTypes="#//OclExpression">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="referredProperty" lowerBound="1"
+ eType="#//Property"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="#//TypedElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExp">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
+ eType="#//CollectionLiteralPart" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EDataType" name="String"/>
+</ecore:EPackage>
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore b/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore
index 002b0c2..d6277d8 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore
+++ b/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore
@@ -1,42 +1,42 @@
-<?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="oclCS" nsURI="xx" nsPrefix="xx">
- <eClassifiers xsi:type="ecore:EClass" name="LetExpCS" eSuperTypes="#//OclExpressionCS">
- <eStructuralFeatures xsi:type="ecore:EReference" name="inExpression" lowerBound="1"
- eType="#//OclExpressionCS" containment="true"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"
- eType="#//VariableDeclarationCS" containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="VariableDeclarationCS">
- <eStructuralFeatures xsi:type="ecore:EReference" name="initExp" eType="#//OclExpressionCS"
- containment="true"/>
- <eStructuralFeatures xsi:type="ecore:EReference" name="varType" eType="#//TypeCS"
- containment="true"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="VariableExpCS" eSuperTypes="#//OclExpressionCS">
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionRangeCS" eSuperTypes="#//CollectionLiteralPartCS">
- <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpressionCS"
- containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="OclExpressionCS" abstract="true"/>
- <eClassifiers xsi:type="ecore:EClass" name="TypeCS" eSuperTypes="#//OclExpressionCS">
- <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpressionCS"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPartCS">
- <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpressionCS"
- containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="EClass0"/>
- <eClassifiers xsi:type="ecore:EClass" name="NameExpCS">
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//String"/>
- <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMarkedAsPre" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExpCS" eSuperTypes="#//OclExpressionCS">
- <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
- eType="#//CollectionLiteralPartCS" containment="true"/>
- </eClassifiers>
- <eClassifiers xsi:type="ecore:EDataType" name="String"/>
-</ecore:EPackage>
+<?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="oclCS" nsURI="xx" nsPrefix="xx">
+ <eClassifiers xsi:type="ecore:EClass" name="LetExpCS" eSuperTypes="#//OclExpressionCS">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="inExpression" lowerBound="1"
+ eType="#//OclExpressionCS" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"
+ eType="#//VariableDeclarationCS" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="VariableDeclarationCS">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="initExp" eType="#//OclExpressionCS"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="varType" eType="#//TypeCS"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="VariableExpCS" eSuperTypes="#//OclExpressionCS">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionRangeCS" eSuperTypes="#//CollectionLiteralPartCS">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpressionCS"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OclExpressionCS" abstract="true"/>
+ <eClassifiers xsi:type="ecore:EClass" name="TypeCS" eSuperTypes="#//OclExpressionCS">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpressionCS"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPartCS">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpressionCS"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EClass0"/>
+ <eClassifiers xsi:type="ecore:EClass" name="NameExpCS">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMarkedAsPre" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExpCS" eSuperTypes="#//OclExpressionCS">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
+ eType="#//CollectionLiteralPartCS" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EDataType" name="String"/>
+</ecore:EPackage>
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl b/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl
index 14a46da..7c2a246 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl
+++ b/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl
@@ -9,7 +9,7 @@
def :ast() : oclAS::Type =
null
-context ExpCS
+context OclExpressionCS
def :ast() : oclAS::OclExpression =
null
@@ -67,7 +67,7 @@
def : ast() : oclAS::OclExpression =
if isAVariableExp()
then
- let variable = ast().lookupVariable(self)
+ let variable = ast().lookupVariable(name)
in oclAS::VariableExp {
name = name,
referredVariable = variable,
@@ -77,7 +77,7 @@
endif
}
else
- let property = ast().lookupProperty(self)
+ let property = ast().lookupProperty(name)
in oclAS::PropertyCallExp {
name = name,
referredProperty = property,
@@ -88,6 +88,7 @@
}
endif
+
endpackage
package oclAS
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl b/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl
index 2f50eb4..4d176fa 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl
+++ b/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl
@@ -2,11 +2,19 @@
import 'AS.ecore'
import 'Lookup.ocl'
+
+package oclCS
+context NameExpCS
+def : ast() : oclAS::OclExpression =
+ null
+
+endpackage
+
package oclCS
context NameExpCS
def : isAVariableExp() : Boolean =
- let variable = ast().lookupVariable(self)
+ let variable = ast().lookupVariable(name)
in variable <> null
endpackage
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/Environment.ecore b/ocl/docs/publications/OCL2015CS2AS/models/Environment.ecore
new file mode 100644
index 0000000..c95ff45
--- /dev/null
+++ b/ocl/docs/publications/OCL2015CS2AS/models/Environment.ecore
@@ -0,0 +1,5 @@
+<?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="env" nsURI="http://env">
+ <eClassifiers xsi:type="ecore:EClass" name="Environment"/>
+</ecore:EPackage>
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl b/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl
index f739e95..d5e7922 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl
+++ b/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl
@@ -1,6 +1,45 @@
import 'CS.ecore'
import 'AS.ecore'
+import 'Environment.ecore'
+
+package env
+context Environment
+def : nestedEnv() : Environment =
+ null
+
+def : addElement(element : OclAny) : Environment =
+ null
+endpackage
+
+package ocl
+context OclElement
+
+def : env : env::Environment =
+ if oclContainer() <> null
+ then oclContainer().childEnv(self)
+ else env::Environment{}
+ endif
+
+def : childEnv(child : OclAny) : env::Environment =
+ env
+
+
+endpackage
package oclAS
+context LetExp
+def : childEnv(child : OclAny) : env::Environment =
+ if child = variable
+ then env
+ else env.nestedEnv().addElement(variable)
+ endif
+
+
+context OclExpression
+def : lookupVariable(name : String ) : Variable =
+ null
+
+def : lookupProperty(name : String ) : Property =
+ null
endpackage
\ No newline at end of file
diff --git a/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf b/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf
index 5462b87..24b8d30 100644
--- a/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf
+++ b/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf
Binary files differ
diff --git a/ocl/docs/publications/OCL2015CS2AS/ow2015.tex b/ocl/docs/publications/OCL2015CS2AS/ow2015.tex
index 40c7812..b48c2c2 100644
--- a/ocl/docs/publications/OCL2015CS2AS/ow2015.tex
+++ b/ocl/docs/publications/OCL2015CS2AS/ow2015.tex
@@ -417,7 +417,7 @@
\begin{lstlisting}[caption=Name resolution producers, label=lst:exampleNameResodesc, language=OCL]
context OclAny
-def : env : env::Environment
+def : env : env::Environment =
if oclContainer() <> null
then oclContainer().childEnv(self)
else env::Environment{}
@@ -627,8 +627,8 @@
def : ast() : ocl::OclExpression =
if isAVariableExp()
then
- let variable = ast().lookupVariable(self)
- in oclAS::VariableExp {
+ let variable = ast().lookupVariable(name)
+ in ocl::VariableExp {
name = name,
referredVariable = variable,
type = if variable = null
@@ -637,8 +637,8 @@
endif
}
else
- let property = ast().lookupProperty(self)
- in oclAS::PropertyCallExp {
+ let property = ast().lookupProperty(name)
+ in ocl::PropertyCallExp {
name = name,
referredProperty = property,
type = if property = null
@@ -654,7 +654,7 @@
\begin{lstlisting}[caption=NameExpCS disambigutation rule, label=lst:nameExpDisambiguationRule, language=OCL]
context NameExpCS
def : isAVariableExp() : Boolean =
- let variable = ast().lookupVariable(self),
+ let variable = ast().lookupVariable(name)
in variable <> null
\end{lstlisting}
@@ -741,7 +741,7 @@
\begin{itemize}
\item \textbf{Mapping}. An OCL operation hierarchy maps CS artifacts to the AS.
\item \textbf{Name Resolution}. An OCL operation hierarchy flows the visible names down to the point of access.
-\item \textbf{Disambiguation}. Unified CS elements, plus CS disambiguation rules, avoid the need for semantic resolution within a syntactic parser.
+i\item \textbf{Disambiguation}. Unified CS artifacts, plus CS disambiguation rules, avoid the need for semantic resolution within a syntactic parser.
\end{itemize}
Our bridge is currently ready-to-go; it works on test examples. It will now be applied to replace manual tooling in Eclipse OCL and QVT by tooling generated direct from the potential OCL 2.5 specification models.