<?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="ast"
    nsURI="http://www.eclipselabs.org/mscript/AST/1.0.0" nsPrefix="ast">
  <eClassifiers xsi:type="ecore:EClass" name="Module">
    <eStructuralFeatures xsi:type="ecore:EReference" name="definitions" upperBound="-1"
        eType="#//Definition" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Definition" abstract="true">
    <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="DataTypeDefinition" abstract="true"
      eSuperTypes="#//Definition"/>
  <eClassifiers xsi:type="ecore:EClass" name="EnumerationDefinition" eSuperTypes="#//DataTypeDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="literalDeclarations" upperBound="-1"
        eType="#//EnumerationLiteralDeclaration" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EnumerationLiteralDeclaration">
    <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="TypeAliasDefinition" eSuperTypes="#//DataTypeDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//PrimitiveType"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordDefinition" eSuperTypes="#//DataTypeDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="fieldDeclarations" upperBound="-1"
        eType="#//RecordFieldDeclaration" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordFieldDeclaration">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//DataTypeSpecifier"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition" eSuperTypes="#//Definition #//CallableElement">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//FunctionKind"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="templateParameterDeclarations"
        upperBound="-1" eType="#//TemplateParameterDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="inputParameterDeclarations"
        upperBound="-1" eType="#//InputParameterDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="outputParameterDeclarations"
        upperBound="-1" eType="#//OutputParameterDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="checks" upperBound="-1"
        eType="#//Check" containment="true" eOpposite="#//Check/function"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="assertions" upperBound="-1"
        eType="#//Assertion" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="functionObjectDeclarations"
        upperBound="-1" eType="#//FunctionObjectDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="stateVariableDeclarations"
        upperBound="-1" eType="#//StateVariableDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="equations" upperBound="-1"
        eType="#//Equation" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="FunctionKind">
    <eLiterals name="Stateless"/>
    <eLiterals name="Stateful" value="1"/>
    <eLiterals name="Continuous" value="2"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Check">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" lowerBound="1"
        eType="#//FunctionDefinition" eOpposite="#//FunctionDefinition/checks"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="templateArguments" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="inputParameterTypes" upperBound="-1"
        eType="#//DataTypeSpecifier" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="outputParameterTypes" upperBound="-1"
        eType="#//DataTypeSpecifier" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="CallableElement" abstract="true">
    <eOperations name="getName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eOperations name="getQualifiedName" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ParameterDeclaration" abstract="true"
      eSuperTypes="#//CallableElement">
    <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="TemplateParameterDeclaration" eSuperTypes="#//ParameterDeclaration"/>
  <eClassifiers xsi:type="ecore:EClass" name="InputParameterDeclaration" eSuperTypes="#//ParameterDeclaration"/>
  <eClassifiers xsi:type="ecore:EClass" name="OutputParameterDeclaration" eSuperTypes="#//ParameterDeclaration"/>
  <eClassifiers xsi:type="ecore:EEnum" name="AssertionStatusKind">
    <eLiterals name="Info" literal="info"/>
    <eLiterals name="Warning" value="1" literal="warning"/>
    <eLiterals name="Error" value="2" literal="error"/>
    <eLiterals name="Fatal" value="3" literal="fatal"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Assertion">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="static" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="statusKind" eType="#//AssertionStatusKind"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="message" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="StateVariableDeclaration" eSuperTypes="#//CallableElement">
    <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="FunctionObjectDeclaration" eSuperTypes="#//CallableElement">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="functionName" eType="#//FunctionDefinition"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="templateArguments" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Equation">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="initial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftHandSide" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightHandSide" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="DataTypeSpecifier">
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//DataType"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="definedType" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//DataType"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LetExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variableDeclarations" upperBound="-1"
        eType="#//LetExpressionVariableDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="targetExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LetExpressionVariableDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
        eType="#//LetExpressionVariableDeclarationPart" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="assignedExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LetExpressionVariableDeclarationPart"
      eSuperTypes="#//CallableElement">
    <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="IfExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="static" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="thenExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="elseExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SwitchExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="static" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="controlExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="cases" upperBound="-1"
        eType="#//SwitchCase" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SwitchCase">
    <eStructuralFeatures xsi:type="ecore:EReference" name="caseExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="resultExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="EqualityOperator">
    <eLiterals name="EqualTo" literal="=="/>
    <eLiterals name="NotEqualTo" value="1" literal="!="/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="RelationalOperator">
    <eLiterals name="LessThan" literal="&lt;"/>
    <eLiterals name="LessThanOrEqualTo" value="1" literal="&lt;="/>
    <eLiterals name="GreaterThan" value="2" literal=">"/>
    <eLiterals name="GreaterThanOrEqualTo" value="3" literal=">="/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="AdditiveOperator">
    <eLiterals name="Add" literal="+"/>
    <eLiterals name="Subtract" value="1" literal="-"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="MultiplicativeOperator">
    <eLiterals name="Multiply" literal="*"/>
    <eLiterals name="Divide" value="1" literal="/"/>
    <eLiterals name="ElementWiseMultiply" value="2" literal=".*"/>
    <eLiterals name="ElementWiseDivide" value="3" literal="./"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="PowerOperator">
    <eLiterals name="Power" literal="^"/>
    <eLiterals name="ElementWisePower" value="1" literal=".^"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="UnaryOperator">
    <eLiterals name="Negate" literal="-"/>
    <eLiterals name="LogicalNot" value="1" literal="!"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EEnum" name="PostfixOperator">
    <eLiterals name="Transpose" literal="'"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayElementAccess" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="array" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="subscripts" upperBound="-1"
        eType="#//ArraySubscript" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArraySubscript">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="slice" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="IterationCall" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="variables" upperBound="-1"
        eType="#//IterationVariable" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="accumulator" eType="#//IterationAccumulator"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="breakCondition" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="IterationVariable" eSuperTypes="#//CallableElement">
    <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="IterationAccumulator" eSuperTypes="#//CallableElement">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="DerivativeOperator" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//CallableElement"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayConstructionOperator" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expressions" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="iterationClauses" upperBound="-1"
        eType="#//ArrayConstructionIterationClause" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayConstructionIterationClause">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variableName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="collectionExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayConcatenationOperator" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="rows" upperBound="-1" eType="#//ExpressionList"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ExpressionList">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expressions" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnitConstructionOperator" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="unit" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Unit"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ParenthesizedExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expressions" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EndExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"/>
  <eClassifiers xsi:type="ecore:EClass" name="RangeExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operands" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ImpliesExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LogicalOrExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LogicalAndExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EqualityExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//EqualityOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RelationalExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//RelationalOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypeTestExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//DataTypeSpecifier"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AdditiveExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//AdditiveOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MultiplicativeExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//MultiplicativeOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PowerExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//PowerOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="exponent" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//UnaryOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PostfixExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//PostfixOperator"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="FeatureCall" abstract="true" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//CallableElement"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="VariableAccess" eSuperTypes="#//FeatureCall">
    <eOperations name="isInitial" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="stepExpression" eType="#//StepExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="StepExpression" abstract="true"/>
  <eClassifiers xsi:type="ecore:EClass" name="RangeStepExpression" eSuperTypes="#//StepExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="start" eType="#//StepExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="end" eType="#//StepExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AdditiveStepExpression" eSuperTypes="#//StepExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//AdditiveOperator"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//StepExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//StepExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NegateStepExpression" eSuperTypes="#//StepExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//StepExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PrimitiveStepExpression" abstract="true"
      eSuperTypes="#//StepExpression"/>
  <eClassifiers xsi:type="ecore:EClass" name="StepLiteral" eSuperTypes="#//PrimitiveStepExpression">
    <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="StepN" eSuperTypes="#//PrimitiveStepExpression"/>
  <eClassifiers xsi:type="ecore:EClass" name="FunctionCall" eSuperTypes="#//FeatureCall">
    <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
        eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MemberVariableAccess" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="memberVariable" eType="#//CallableElement"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AlgorithmExpression" eSuperTypes="../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Compound"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Compound" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="statements" upperBound="-1"
        eType="#//Statement" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Statement" abstract="true"/>
  <eClassifiers xsi:type="ecore:EClass" name="Assignment" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="VariableDeclaration" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="initializer" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="IfStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="thenStatement" eType="#//Statement"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="elseStatement" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="DoWhileStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ForStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="iterationVariable" eType="#//IterationVariable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="collectionExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ContinueStatement" eSuperTypes="#//Statement"/>
  <eClassifiers xsi:type="ecore:EClass" name="BreakStatement" eSuperTypes="#//Statement"/>
  <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="BuiltinDefinition" eSuperTypes="#//Definition #//CallableElement"/>
  <eClassifiers xsi:type="ecore:EClass" name="BuiltinFunction" eSuperTypes="#//BuiltinDefinition"/>
  <eClassifiers xsi:type="ecore:EClass" name="BuiltinVariable" eSuperTypes="#//BuiltinDefinition"/>
</ecore:EPackage>
