Browse Source

Branch array extensions

menznerowski@gmail.com 11 years ago
parent
commit
fb6e9ecf8a

+ 446 - 105
plugins/org.yakindu.base.expressions/model/Expressions.ecore

@@ -1,166 +1,507 @@
 <?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="expressions" nsURI="http://www.yakindu.org/base/expressions/Expressions"
+<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="expressions"
+    nsURI="http://www.yakindu.org/base/expressions/Expressions"
     nsPrefix="expressions">
-  <eClassifiers xsi:type="ecore:EClass" name="Expression" abstract="true"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Literal" abstract="true"/>
-  <eClassifiers xsi:type="ecore:EClass" name="BoolLiteral" eSuperTypes="#//Literal">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="Expression"
+      abstract="true"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="Literal"
+      abstract="true"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="BoolLiteral"
+      eSuperTypes="#//Literal">
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="value"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="IntLiteral" eSuperTypes="#//Literal">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="IntLiteral"
+      eSuperTypes="#//Literal">
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="value"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="RealLiteral" eSuperTypes="#//Literal">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="RealLiteral"
+      eSuperTypes="#//Literal">
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="value"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="HexLiteral" eSuperTypes="#//Literal">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="HexLiteral"
+      eSuperTypes="#//Literal">
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="value"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="StringLiteral" eSuperTypes="#//Literal">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="StringLiteral"
+      eSuperTypes="#//Literal">
+    <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="NullLiteral" eSuperTypes="#//Literal"/>
-  <eClassifiers xsi:type="ecore:EEnum" name="AssignmentOperator">
-    <eLiterals name="assign" literal="="/>
-    <eLiterals name="multAssign" value="1" literal="*="/>
-    <eLiterals name="divAssign" value="2" literal="/="/>
-    <eLiterals name="modAssign" value="3" literal="%="/>
-    <eLiterals name="addAssign" value="4" literal="+="/>
-    <eLiterals name="subAssign" value="5" literal="-="/>
-    <eLiterals name="leftShiftAssign" value="6" literal="&lt;&lt;="/>
-    <eLiterals name="rightShiftAssign" value="7" literal=">>="/>
-    <eLiterals name="andAssign" value="8" literal="&amp;="/>
-    <eLiterals name="xorAssign" value="9" literal="^="/>
-    <eLiterals name="orAssign" value="10" literal="|="/>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="NullLiteral"
+      eSuperTypes="#//Literal"/>
+  <eClassifiers
+      xsi:type="ecore:EEnum"
+      name="AssignmentOperator">
+    <eLiterals
+        name="assign"
+        literal="="/>
+    <eLiterals
+        name="multAssign"
+        value="1"
+        literal="*="/>
+    <eLiterals
+        name="divAssign"
+        value="2"
+        literal="/="/>
+    <eLiterals
+        name="modAssign"
+        value="3"
+        literal="%="/>
+    <eLiterals
+        name="addAssign"
+        value="4"
+        literal="+="/>
+    <eLiterals
+        name="subAssign"
+        value="5"
+        literal="-="/>
+    <eLiterals
+        name="leftShiftAssign"
+        value="6"
+        literal="&lt;&lt;="/>
+    <eLiterals
+        name="rightShiftAssign"
+        value="7"
+        literal=">>="/>
+    <eLiterals
+        name="andAssign"
+        value="8"
+        literal="&amp;="/>
+    <eLiterals
+        name="xorAssign"
+        value="9"
+        literal="^="/>
+    <eLiterals
+        name="orAssign"
+        value="10"
+        literal="|="/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="ShiftOperator">
-    <eLiterals name="left" literal="&lt;&lt;"/>
-    <eLiterals name="right" value="1" literal=">>"/>
+  <eClassifiers
+      xsi:type="ecore:EEnum"
+      name="ShiftOperator">
+    <eLiterals
+        name="left"
+        literal="&lt;&lt;"/>
+    <eLiterals
+        name="right"
+        value="1"
+        literal=">>"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="AdditiveOperator">
-    <eLiterals name="plus" literal="+"/>
-    <eLiterals name="minus" value="1" literal="-"/>
+  <eClassifiers
+      xsi:type="ecore:EEnum"
+      name="AdditiveOperator">
+    <eLiterals
+        name="plus"
+        literal="+"/>
+    <eLiterals
+        name="minus"
+        value="1"
+        literal="-"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="MultiplicativeOperator">
-    <eLiterals name="mul" literal="*"/>
-    <eLiterals name="div" value="1" literal="/"/>
-    <eLiterals name="mod" value="2" literal="%"/>
+  <eClassifiers
+      xsi:type="ecore:EEnum"
+      name="MultiplicativeOperator">
+    <eLiterals
+        name="mul"
+        literal="*"/>
+    <eLiterals
+        name="div"
+        value="1"
+        literal="/"/>
+    <eLiterals
+        name="mod"
+        value="2"
+        literal="%"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="UnaryOperator">
-    <eLiterals name="positive" literal="+"/>
-    <eLiterals name="negative" value="1" literal="-"/>
-    <eLiterals name="complement" value="2" literal="~"/>
+  <eClassifiers
+      xsi:type="ecore:EEnum"
+      name="UnaryOperator">
+    <eLiterals
+        name="positive"
+        literal="+"/>
+    <eLiterals
+        name="negative"
+        value="1"
+        literal="-"/>
+    <eLiterals
+        name="complement"
+        value="2"
+        literal="~"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EEnum" name="RelationalOperator">
-    <eLiterals name="smaller" literal="&lt;"/>
-    <eLiterals name="smallerEqual" value="1" literal="&lt;="/>
-    <eLiterals name="greater" value="2" literal=">"/>
-    <eLiterals name="greaterEqual" value="3" literal=">="/>
-    <eLiterals name="equals" value="4" literal="=="/>
-    <eLiterals name="notEquals" value="5" literal="!="/>
+  <eClassifiers
+      xsi:type="ecore:EEnum"
+      name="RelationalOperator">
+    <eLiterals
+        name="smaller"
+        literal="&lt;"/>
+    <eLiterals
+        name="smallerEqual"
+        value="1"
+        literal="&lt;="/>
+    <eLiterals
+        name="greater"
+        value="2"
+        literal=">"/>
+    <eLiterals
+        name="greaterEqual"
+        value="3"
+        literal=">="/>
+    <eLiterals
+        name="equals"
+        value="4"
+        literal="=="/>
+    <eLiterals
+        name="notEquals"
+        value="5"
+        literal="!="/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="varRef" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="AssignmentExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="varRef"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//AssignmentOperator"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operator"
+        eType="#//AssignmentOperator"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="expression"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ConditionalExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
+  <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="trueCase" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="trueCase"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="falseCase" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="falseCase"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LogicalOrExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="LogicalOrExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LogicalAndExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="LogicalAndExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LogicalNotExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="LogicalNotExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="operand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="BitwiseXorExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="BitwiseXorExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="BitwiseOrExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="BitwiseOrExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="BitwiseAndExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="BitwiseAndExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LogicalRelationExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="LogicalRelationExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//RelationalOperator"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operator"
+        eType="#//RelationalOperator"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ShiftExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="ShiftExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//ShiftOperator"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operator"
+        eType="#//ShiftOperator"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="NumericalAddSubtractExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="NumericalAddSubtractExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//AdditiveOperator"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operator"
+        eType="#//AdditiveOperator"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="NumericalMultiplyDivideExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="NumericalMultiplyDivideExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="leftOperand"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//MultiplicativeOperator"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operator"
+        eType="#//MultiplicativeOperator"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="rightOperand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="NumericalUnaryExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//UnaryOperator"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="NumericalUnaryExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operator"
+        eType="#//UnaryOperator"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="operand"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="PrimitiveValueExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Literal"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="PrimitiveValueExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="value"
+        eType="#//Literal"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FeatureCall" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="owner" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="FeatureCall"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="owner"
+        eType="#//Expression"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operationCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="feature"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operationCall"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="args"
+        upperBound="-1"
+        eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="arrayAccess"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="arraySelector"
+        upperBound="-1"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ElementReferenceExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="reference" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operationCall" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="ElementReferenceExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="reference"
+        eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="operationCall"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="args"
+        upperBound="-1"
+        eType="#//Expression"
+        containment="true"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="arraySelector"
+        upperBound="-1"
+        eType="#//Expression"
         containment="true"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EAttribute"
+        name="arrayAccess"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ParenthesizedExpression" eSuperTypes="#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="ParenthesizedExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="expression"
+        eType="#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers
+      xsi:type="ecore:EClass"
+      name="ArrayInitializationExpression"
+      eSuperTypes="#//Expression">
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="values"
+        upperBound="-1"
+        eType="#//Literal"
+        containment="true"/>
+    <eStructuralFeatures
+        xsi:type="ecore:EReference"
+        name="dim"
+        upperBound="-1"
+        eType="#//Expression"
         containment="true"/>
   </eClassifiers>
 </ecore:EPackage>

+ 21 - 9
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/Expressions.xtext

@@ -76,22 +76,33 @@ NumericalUnaryExpression returns Expression:
 PrimaryExpression returns Expression:
 	PrimitiveValueExpression
 	| FeatureCall
-	| ParenthesizedExpression;
+	| ArrayInitializationExpression
+	| ParenthesizedExpression;
+
 
 PrimitiveValueExpression returns Expression:
 	{PrimitiveValueExpression} value=Literal;
-
+  
+    
 FeatureCall returns Expression:
-	ElementReferenceExpression ({FeatureCall.owner=current} '.' feature=[ecore::EObject]
-	(=> operationCall?='('
-	(args+=Expression (',' args+=Expression)*)?
-	')')?)*;
+    ElementReferenceExpression ({FeatureCall.owner=current} '.' feature=[ecore::EObject] 
+    	(=> operationCall?= '('(args+=Expression (',' args+=Expression)*)?')'
+    	 |  
+    	 =>(arrayAccess ?= '[' arraySelector+=Expression ']') => ('[' arraySelector+=Expression ']')* 
+    	)? 
+    )*;
+    
 
 ElementReferenceExpression returns Expression:
 	{ElementReferenceExpression} reference=[ecore::EObject|ID]
-	(=> operationCall?='('
-	(args+=Expression (',' args+=Expression)*)?
-	')')?;
+		(=> operationCall?='('	(args+=Expression (',' args+=Expression)*)?	')' 
+	   	 | 
+	 	 => (arrayAccess ?= '[' arraySelector+=Expression ']') => ('[' arraySelector+=Expression ']')*
+		)?;
+
+ArrayInitializationExpression returns Expression:
+	{ArrayInitializationExpression} ( ('{' (values+=Literal (',' values+=Literal)*)+ '}') 
+		| ('{' (dim+=ArrayInitializationExpression (',' dim+=ArrayInitializationExpression)*)+ '}' ));
 
 ParenthesizedExpression returns Expression:
 	{ParenthesizedExpression} '(' expression=Expression ')';
@@ -113,6 +124,7 @@ HexLiteral:
 
 StringLiteral:
 	{StringLiteral} value=STRING;
+	
 NullLiteral:
 	{NullLiteral} 'null'
 ;