<?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="Absyn"
    nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/" nsPrefix="Absyn">
  <eSubpackages name="Program" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Program"
      nsPrefix="Program">
    <eClassifiers xsi:type="ecore:EClass" name="uProgram" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="PROGRAM" eSuperTypes="#//Program/uProgram">
      <eStructuralFeatures xsi:type="ecore:EReference" name="classes" upperBound="-1"
          eType="#//Class/uClass" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="within_" lowerBound="1"
          eType="#//Within/uWithin" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Within" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Within"
      nsPrefix="Within">
    <eClassifiers xsi:type="ecore:EClass" name="uWithin" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="WITHIN" eSuperTypes="#//Within/uWithin">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="TOP" eSuperTypes="#//Within/uWithin"/>
  </eSubpackages>
  <eSubpackages name="Class" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Class"
      nsPrefix="Class">
    <eClassifiers xsi:type="ecore:EClass" name="uClass" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="CLASS" eSuperTypes="#//Class/uClass">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="partialPrefix" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="finalPrefix" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="encapsulatedPrefix" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1"
          eType="#//ClassDef/uClassDef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="restriction" lowerBound="1"
          eType="#//Restriction/uRestriction" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ClassDef" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ClassDef"
      nsPrefix="ClassDef">
    <eClassifiers xsi:type="ecore:EClass" name="uClassDef" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="PARTS" eSuperTypes="#//ClassDef/uClassDef">
      <eStructuralFeatures xsi:type="ecore:EReference" name="classParts" upperBound="-1"
          eType="#//ClassPart/uClassPart" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="DERIVED" eSuperTypes="#//ClassDef/uClassDef">
      <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" lowerBound="1"
          eType="#//ElementAttributes/uElementAttributes" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
          eType="#//ElementArg/uElementArg" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpec" lowerBound="1"
          eType="#//TypeSpec/uTypeSpec" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ENUMERATION" eSuperTypes="#//ClassDef/uClassDef">
      <eStructuralFeatures xsi:type="ecore:EReference" name="enumLiterals" lowerBound="1"
          eType="#//EnumDef/uEnumDef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="OVERLOAD" eSuperTypes="#//ClassDef/uClassDef">
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionNames" upperBound="-1"
          eType="#//Path/uPath" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="CLASS_EXTENDS" eSuperTypes="#//ClassDef/uClassDef">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="baseClassName" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="modifications" upperBound="-1"
          eType="#//ElementArg/uElementArg" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
          eType="#//ClassPart/uClassPart" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="PDER" eSuperTypes="#//ClassDef/uClassDef">
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionName" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="vars" upperBound="-1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="EnumDef" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/EnumDef"
      nsPrefix="EnumDef">
    <eClassifiers xsi:type="ecore:EClass" name="uEnumDef" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ENUMLITERALS" eSuperTypes="#//EnumDef/uEnumDef">
      <eStructuralFeatures xsi:type="ecore:EReference" name="enumLiterals" upperBound="-1"
          eType="#//EnumLiteral/uEnumLiteral" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ENUM_COLON" eSuperTypes="#//EnumDef/uEnumDef"/>
  </eSubpackages>
  <eSubpackages name="EnumLiteral" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/EnumLiteral"
      nsPrefix="EnumLiteral">
    <eClassifiers xsi:type="ecore:EClass" name="uEnumLiteral" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ENUMLITERAL" eSuperTypes="#//EnumLiteral/uEnumLiteral">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="literal" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ClassPart" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ClassPart"
      nsPrefix="ClassPart">
    <eClassifiers xsi:type="ecore:EClass" name="uClassPart" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="PUBLIC" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
          eType="#//ElementItem/uElementItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="PROTECTED" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
          eType="#//ElementItem/uElementItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQUATIONS" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="INITIALEQUATIONS" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
          eType="#//EquationItem/uEquationItem"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALGORITHMS" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="INITIALALGORITHMS" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="contents" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EXTERNAL" eSuperTypes="#//ClassPart/uClassPart">
      <eStructuralFeatures xsi:type="ecore:EReference" name="externalDecl" lowerBound="1"
          eType="#//ExternalDecl/uExternalDecl" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotationNode" eType="#//Annotation/uAnnotation"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ElementItem" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ElementItem"
      nsPrefix="ElementItem">
    <eClassifiers xsi:type="ecore:EClass" name="uElementItem" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ELEMENTITEM" eSuperTypes="#//ElementItem/uElementItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="element" lowerBound="1"
          eType="#//Element/uElement" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ANNOTATIONITEM" eSuperTypes="#//ElementItem/uElementItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotation_" lowerBound="1"
          eType="#//Annotation/uAnnotation" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Element" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Element"
      nsPrefix="Element">
    <eClassifiers xsi:type="ecore:EClass" name="uElement" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ELEMENT" eSuperTypes="#//Element/uElement">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="finalPrefix" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="specification" lowerBound="1"
          eType="#//ElementSpec/uElementSpec" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="constrainClass" eType="#//ConstrainClass/uConstrainClass"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="redeclareKeywords" eType="#//RedeclareKeywords/uRedeclareKeywords"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="innerOuter" lowerBound="1"
          eType="#//InnerOuter/uInnerOuter" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="TEXT" eSuperTypes="#//Element/uElement">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="optName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="string" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="DEFINEUNIT" eSuperTypes="#//Element/uElement">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1"
          eType="#//NamedArg/uNamedArg" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ConstrainClass" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ConstrainClass"
      nsPrefix="ConstrainClass">
    <eClassifiers xsi:type="ecore:EClass" name="uConstrainClass" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="CONSTRAINCLASS" eSuperTypes="#//ConstrainClass/uConstrainClass">
      <eStructuralFeatures xsi:type="ecore:EReference" name="elementSpec" lowerBound="1"
          eType="#//ElementSpec/uElementSpec" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ElementSpec" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ElementSpec"
      nsPrefix="ElementSpec">
    <eClassifiers xsi:type="ecore:EClass" name="uElementSpec" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="CLASSDEF" eSuperTypes="#//ElementSpec/uElementSpec">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="replaceable_" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="class_" lowerBound="1"
          eType="#//Class/uClass" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EXTENDS" eSuperTypes="#//ElementSpec/uElementSpec">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elementArg" upperBound="-1"
          eType="#//ElementArg/uElementArg" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotationOpt" eType="#//Annotation/uAnnotation"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="IMPORT" eSuperTypes="#//ElementSpec/uElementSpec">
      <eStructuralFeatures xsi:type="ecore:EReference" name="import_" lowerBound="1"
          eType="#//Import/uImport" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="COMPONENTS" eSuperTypes="#//ElementSpec/uElementSpec">
      <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" lowerBound="1"
          eType="#//ElementAttributes/uElementAttributes" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="components" upperBound="-1"
          eType="#//ComponentItem/uComponentItem" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpec" lowerBound="1"
          eType="#//TypeSpec/uTypeSpec" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="InnerOuter" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/InnerOuter"
      nsPrefix="InnerOuter">
    <eClassifiers xsi:type="ecore:EEnum" name="OBSOLETE_InnerOuter">
      <eLiterals name="UNSPECIFIED" value="3"/>
      <eLiterals name="INNER"/>
      <eLiterals name="OUTER" value="1"/>
      <eLiterals name="INNEROUTER" value="2"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uInnerOuter" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="INNER" eSuperTypes="#//InnerOuter/uInnerOuter"/>
    <eClassifiers xsi:type="ecore:EClass" name="OUTER" eSuperTypes="#//InnerOuter/uInnerOuter"/>
    <eClassifiers xsi:type="ecore:EClass" name="INNEROUTER" eSuperTypes="#//InnerOuter/uInnerOuter"/>
    <eClassifiers xsi:type="ecore:EClass" name="UNSPECIFIED" eSuperTypes="#//InnerOuter/uInnerOuter"/>
  </eSubpackages>
  <eSubpackages name="Import" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Import"
      nsPrefix="Import">
    <eClassifiers xsi:type="ecore:EClass" name="uImport" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="NAMED_IMPORT" eSuperTypes="#//Import/uImport">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="QUAL_IMPORT" eSuperTypes="#//Import/uImport">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="UNQUAL_IMPORT" eSuperTypes="#//Import/uImport">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ComponentItem" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ComponentItem"
      nsPrefix="ComponentItem">
    <eClassifiers xsi:type="ecore:EClass" name="uComponentItem" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="COMPONENTITEM" eSuperTypes="#//ComponentItem/uComponentItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="component" lowerBound="1"
          eType="#//Component/uComponent" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ComponentCondition" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ComponentCondition"
      nsPrefix="ComponentCondition">
    <eClassifiers xsi:type="ecore:EClass" name="ComponentCondition">
      <eStructuralFeatures xsi:type="ecore:EReference" name="condition" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Component" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Component"
      nsPrefix="Component">
    <eClassifiers xsi:type="ecore:EClass" name="uComponent" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="COMPONENT" eSuperTypes="#//Component/uComponent">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="arrayDim" lowerBound="1"
          eType="#//ArrayDim/ArrayDim" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//Modifications/uModification"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="EquationItem" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/EquationItem"
      nsPrefix="EquationItem">
    <eClassifiers xsi:type="ecore:EClass" name="uEquationItem" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="EQUATIONITEM" eSuperTypes="#//EquationItem/uEquationItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="equation_" lowerBound="1"
          eType="#//Equation/uEquation" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQUATIONITEMANN" eSuperTypes="#//EquationItem/uEquationItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotation_" lowerBound="1"
          eType="#//Annotation/uAnnotation" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="AlgorithmItem" nsURI="http://www.openmodelica.org/openmodelica.unparsed/AlgorithmItem"
      nsPrefix="AlgorithmItem">
    <eClassifiers xsi:type="ecore:EClass" name="uAlgorithmItem">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unparsedAlgorithmItem"
          lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALGORITHMITEM" eSuperTypes="#//AlgorithmItem/uAlgorithmItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="algorithm_" lowerBound="1"
          eType="#//AlgorithmStatement/uAlgorithmStatement" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALGORITHMITEMANN" eSuperTypes="#//AlgorithmItem/uAlgorithmItem">
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotation_" lowerBound="1"
          eType="#//Annotation/uAnnotation" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Equation" nsURI="http://www.openmodelica.org/openmodelica.unparsed/Equation"
      nsPrefix="Equation">
    <eClassifiers xsi:type="ecore:EClass" name="uEquation">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unparsedEquation" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_IF" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="ifExp" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="equationTrueItems" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseIfBranches" upperBound="-1"
          eType="#//Equation/tuple_ElseIfBranch" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="equationElseItems" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_EQUALS" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="leftSide" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="rightSide" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_CONNECT" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="connector1" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="connector2" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_FOR" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="forEquations" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="iterators" lowerBound="1"
          eType="#//Iterators/ForIterators" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_WHEN_E" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="whenExp" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="whenEquations" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseWhenEquations" upperBound="-1"
          eType="#//Equation/tuple_ElseWhenEquation" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_NORETCALL" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionArgs" lowerBound="1"
          eType="#//FunctionArgs/uFunctionArguments" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionName" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_ElseIfBranch">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="equationItem" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_ElseWhenEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="equationItem" upperBound="-1"
          eType="#//EquationItem/uEquationItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="EQ_FAILURE" eSuperTypes="#//Equation/uEquation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="equ" lowerBound="1" eType="#//EquationItem/uEquationItem"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="AlgorithmStatement" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/AlgorithmStatement"
      nsPrefix="AlgorithmStatement">
    <eClassifiers xsi:type="ecore:EClass" name="uAlgorithmStatement" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_ASSIGN" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement">
      <eStructuralFeatures xsi:type="ecore:EReference" name="assignComponent" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="value" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_IF" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement">
      <eStructuralFeatures xsi:type="ecore:EReference" name="ifExp" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="trueBranch" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseIfAlgorithmBranch"
          upperBound="-1" eType="#//AlgorithmStatement/tuple_ElseIfAlgorithmBranch"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseBranch" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_FOR" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement">
      <eStructuralFeatures xsi:type="ecore:EReference" name="iterators" lowerBound="1"
          eType="#//Iterators/ForIterators"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="forBody" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_WHILE" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement">
      <eStructuralFeatures xsi:type="ecore:EReference" name="boolExpr" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="whileBody" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_WHEN_A" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement">
      <eStructuralFeatures xsi:type="ecore:EReference" name="boolExpr" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="whenBody" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseWhenAlgorithmBranch"
          upperBound="-1" eType="#//AlgorithmStatement/tuple_ElseWhenAlgorithmBranch"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_NORETCALL" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement">
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionCall" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionArgs" lowerBound="1"
          eType="#//FunctionArgs/uFunctionArguments" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_RETURN" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement"/>
    <eClassifiers xsi:type="ecore:EClass" name="ALG_BREAK" eSuperTypes="#//AlgorithmStatement/uAlgorithmStatement"/>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_ElseIfAlgorithmBranch">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="AlgorithmItem" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_ElseWhenAlgorithmBranch">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="algorithmItem" upperBound="-1"
          eType="#//AlgorithmItem/uAlgorithmItem" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Modifications" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Modifications"
      nsPrefix="Modifications">
    <eClassifiers xsi:type="ecore:EClass" name="uModification" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="CLASSMOD" eSuperTypes="#//Modifications/uModification">
      <eStructuralFeatures xsi:type="ecore:EReference" name="elementArgLst" upperBound="-1"
          eType="#//ElementArg/uElementArg" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="expOption" eType="#//Exp/uExp"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ElementArg" nsURI="http://www.openmodelica.org/openmodelica.unparsed/ElementArg"
      nsPrefix="ElementArg">
    <eClassifiers xsi:type="ecore:EClass" name="uElementArg">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unparsedElementArg" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="MODIFICATION" eSuperTypes="#//ElementArg/uElementArg">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="finalItem" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="each_" lowerBound="1"
          eType="#//Each/uEach" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="componentRef" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="modification" eType="#//Modifications/uModification"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="REDECLARATION" eSuperTypes="#//ElementArg/uElementArg">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="finalItem" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="redeclareKeywords" lowerBound="1"
          eType="#//RedeclareKeywords/uRedeclareKeywords" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="each_" lowerBound="1"
          eType="#//Each/uEach" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elementSpec" lowerBound="1"
          eType="#//ElementSpec/uElementSpec" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="constrainClass" lowerBound="1"
          eType="#//ConstrainClass/uConstrainClass" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="RedeclareKeywords" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/RedeclareKeywords"
      nsPrefix="RedeclareKeywords">
    <eClassifiers xsi:type="ecore:EEnum" name="BSOLETE_RedeclareKeywords">
      <eLiterals name="REDECLARE"/>
      <eLiterals name="REPLACEABLE" value="1"/>
      <eLiterals name="REDECLARE_REPLACEABLE" value="2"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uRedeclareKeywords" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="REDECLARE" eSuperTypes="#//RedeclareKeywords/uRedeclareKeywords"/>
    <eClassifiers xsi:type="ecore:EClass" name="REPLACEABLE" eSuperTypes="#//RedeclareKeywords/uRedeclareKeywords"/>
    <eClassifiers xsi:type="ecore:EClass" name="REDECLARE_REPLACEABLE" eSuperTypes="#//RedeclareKeywords/uRedeclareKeywords"/>
  </eSubpackages>
  <eSubpackages name="Each" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Each"
      nsPrefix="Each">
    <eClassifiers xsi:type="ecore:EEnum" name="OBSOLETE_Each">
      <eLiterals name="EACH"/>
      <eLiterals name="NON_EACH" value="1"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uEach" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="EACH" eSuperTypes="#//Each/uEach"/>
    <eClassifiers xsi:type="ecore:EClass" name="NON_EACH" eSuperTypes="#//Each/uEach"/>
  </eSubpackages>
  <eSubpackages name="ElementAttributes" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ElementAttributes"
      nsPrefix="ElementAttributes">
    <eClassifiers xsi:type="ecore:EClass" name="uElementAttributes" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ATTR" eSuperTypes="#//ElementAttributes/uElementAttributes">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="flowPrefix" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="streamPrefix" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="variability" lowerBound="1"
          eType="#//Variability/uVariability" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="direction" lowerBound="1"
          eType="#//Direction/uDirection" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="arrayDim" lowerBound="1"
          eType="#//ArrayDim/ArrayDim" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Variability" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Variability"
      nsPrefix="Variability">
    <eClassifiers xsi:type="ecore:EEnum" name="OBSOLETE_Variability">
      <eLiterals name="CONTINUOUS"/>
      <eLiterals name="DISCRETE" value="1"/>
      <eLiterals name="PARAMETER" value="2"/>
      <eLiterals name="CONSTANT" value="3"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uVariability" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="VAR" eSuperTypes="#//Variability/uVariability"/>
    <eClassifiers xsi:type="ecore:EClass" name="DISCRETE" eSuperTypes="#//Variability/uVariability"/>
    <eClassifiers xsi:type="ecore:EClass" name="PARAM" eSuperTypes="#//Variability/uVariability"/>
    <eClassifiers xsi:type="ecore:EClass" name="CONST" eSuperTypes="#//Variability/uVariability"/>
  </eSubpackages>
  <eSubpackages name="Direction" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Direction"
      nsPrefix="Direction">
    <eClassifiers xsi:type="ecore:EEnum" name="OBSOLETE_Direction">
      <eLiterals name="INPUT"/>
      <eLiterals name="OUTPUT" value="1"/>
      <eLiterals name="ACAUSAL" value="2"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uDirection" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="INPUT" eSuperTypes="#//Direction/uDirection"/>
    <eClassifiers xsi:type="ecore:EClass" name="OUTPUT" eSuperTypes="#//Direction/uDirection"/>
    <eClassifiers xsi:type="ecore:EClass" name="BIDIR" eSuperTypes="#//Direction/uDirection"/>
  </eSubpackages>
  <eSubpackages name="ArrayDim" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ArrayDim"
      nsPrefix="ArrayDim">
    <eClassifiers xsi:type="ecore:EClass" name="ArrayDim">
      <eStructuralFeatures xsi:type="ecore:EReference" name="subscripts" upperBound="-1"
          eType="#//Subscript/uSubscript" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Exp" nsURI="http://www.openmodelica.org/openmodelica.unparsed/Exp"
      nsPrefix="Exp">
    <eClassifiers xsi:type="ecore:EClass" name="uExp">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unparsedExp" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="INTEGER" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="REAL" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="CREF" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="componentRef" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="STRING" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="BOOL" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="BINARY" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp1" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="op" lowerBound="1" eType="#//Operator/uOperator"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp2" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="UNARY" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="op" lowerBound="1" eType="#//Operator/uOperator"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="LBINARY" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp1" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="op" lowerBound="1" eType="#//Operator/uOperator"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp2" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="LUNARY" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="op" lowerBound="1" eType="#//Operator/uOperator"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="RELATION" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp1" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="op" lowerBound="1" eType="#//Operator/uOperator"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp2" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="IFEXP" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="ifExp" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="trueBranch" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseBranch" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="elseIfBranch" upperBound="-1"
          eType="#//Exp/tuple_ElseIfBranch" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="CALL" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="function_" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionArgs" lowerBound="1"
          eType="#//FunctionArgs/uFunctionArguments" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ARRAY" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="arrayExp" upperBound="-1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="MATRIX" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" upperBound="-1"
          eType="#//Exp/tuple_Matrix" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="RANGE" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="start" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="step" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="stop" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="TUPLE" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="expressions" upperBound="-1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="END" eSuperTypes="#//Exp/uExp"/>
    <eClassifiers xsi:type="ecore:EClass" name="PARTEVALFUNCTION" eSuperTypes="#//Exp/uExp">
      <eStructuralFeatures xsi:type="ecore:EReference" name="function_" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="functionArgs" lowerBound="1"
          eType="#//FunctionArgs/uFunctionArguments" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_ElseIfBranch">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp1" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp2" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_Matrix">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" upperBound="-1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="FunctionArgs" nsURI="http://www.openmodelica.org/openmodelica.unparsed/FunctionArgs"
      nsPrefix="FunctionArgs">
    <eClassifiers xsi:type="ecore:EClass" name="uFunctionArguments">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unparsedFunctionArgs"
          lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="FUNCTIONARGS" eSuperTypes="#//FunctionArgs/uFunctionArguments">
      <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="argNames" upperBound="-1"
          eType="#//NamedArg/uNamedArg" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="FOR_ITER_FARG" eSuperTypes="#//FunctionArgs/uFunctionArguments">
      <eStructuralFeatures xsi:type="ecore:EReference" name="exp" lowerBound="1" eType="#//Exp/uExp"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="iterators" lowerBound="1"
          eType="#//Iterators/ForIterator" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="NamedArg" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/NamedArg"
      nsPrefix="NamedArg">
    <eClassifiers xsi:type="ecore:EClass" name="uNamedArg" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="NAMEDARG" eSuperTypes="#//NamedArg/uNamedArg">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="argName" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="argValue" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Operator" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Operator"
      nsPrefix="Operator">
    <eClassifiers xsi:type="ecore:EEnum" name="OBSOLETE_Operator">
      <eLiterals name="ADD"/>
      <eLiterals name="SUB" value="1"/>
      <eLiterals name="MUL" value="2"/>
      <eLiterals name="DIV" value="3"/>
      <eLiterals name="POW" value="4"/>
      <eLiterals name="UPLUS" value="5"/>
      <eLiterals name="UMINUS" value="6"/>
      <eLiterals name="AND" value="7"/>
      <eLiterals name="OR" value="8"/>
      <eLiterals name="NOT" value="9"/>
      <eLiterals name="LESS" value="10"/>
      <eLiterals name="LESSEQ" value="11"/>
      <eLiterals name="GREATER" value="12"/>
      <eLiterals name="GREATEREQ" value="13"/>
      <eLiterals name="EQUAL" value="14"/>
      <eLiterals name="NEQUAL" value="15"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uOperator" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ADD" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="SUB" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="MUL" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="DIV" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="POW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="UPLUS" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="UMINUS" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="ADD_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="SUB_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="MUL_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="DIV_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="POW_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="UPLUS_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="UMINUS_EW" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="AND" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="OR" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="NOT" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="LESS" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="LESSEQ" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="GREATER" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="GREATEREQ" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="EQUAL" eSuperTypes="#//Operator/uOperator"/>
    <eClassifiers xsi:type="ecore:EClass" name="NEQUAL" eSuperTypes="#//Operator/uOperator"/>
  </eSubpackages>
  <eSubpackages name="Subscript" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Subscript"
      nsPrefix="Subscript">
    <eClassifiers xsi:type="ecore:EClass" name="uSubscript" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="NOSUB" eSuperTypes="#//Subscript/uSubscript"/>
    <eClassifiers xsi:type="ecore:EClass" name="SUBSCRIPT" eSuperTypes="#//Subscript/uSubscript">
      <eStructuralFeatures xsi:type="ecore:EReference" name="subScript" lowerBound="1"
          eType="#//Exp/uExp" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ComponentRef" nsURI="http://www.openmodelica.org/openmodelica.unparsed/ComponentRef"
      nsPrefix="ComponentRef">
    <eClassifiers xsi:type="ecore:EClass" name="uComponentRef">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="unparsedComponentRef"
          lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="CREF_QUAL" eSuperTypes="#//ComponentRef/uComponentRef">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="subScripts" upperBound="-1"
          eType="#//Subscript/uSubscript" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="componentRef" lowerBound="1"
          eType="#//ComponentRef/uComponentRef" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="CREF_IDENT" eSuperTypes="#//ComponentRef/uComponentRef">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="subscripts" upperBound="-1"
          eType="#//Subscript/uSubscript" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="WILD" eSuperTypes="#//ComponentRef/uComponentRef"/>
  </eSubpackages>
  <eSubpackages name="Path" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Path"
      nsPrefix="Path">
    <eClassifiers xsi:type="ecore:EClass" name="uPath" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="QUALIFIED" eSuperTypes="#//Path/uPath">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="IDENT" eSuperTypes="#//Path/uPath">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="FULLYQUALIFIED" eSuperTypes="#//Path/uPath">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Restriction" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Restriction"
      nsPrefix="Restriction">
    <eClassifiers xsi:type="ecore:EEnum" name="OBSOLETE_Restriction">
      <eLiterals name="R_CLASS"/>
      <eLiterals name="R_MODEL" value="1"/>
      <eLiterals name="R_RECORD" value="2"/>
      <eLiterals name="R_BLOCK" value="3"/>
      <eLiterals name="R_CONNECTOR" value="4"/>
      <eLiterals name="R_EXP_CONNECTOR" value="5"/>
      <eLiterals name="R_TYPE" value="6"/>
      <eLiterals name="R_PACKAGE" value="7"/>
      <eLiterals name="R_FUNCTION" value="8"/>
      <eLiterals name="R_ENUMERATION" value="9"/>
      <eLiterals name="R_PREDEFINED_INT" value="10"/>
      <eLiterals name="R_PREDEFINED_REAL" value="11"/>
      <eLiterals name="R_PREDEFINED_STRING" value="12"/>
      <eLiterals name="R_PREDEFINED_BOOL" value="13"/>
      <eLiterals name="R_PREDEFINED_ENUM" value="14"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="uRestriction" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_CLASS" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_MODEL" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_RECORD" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_BLOCK" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_CONNECTOR" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_EXP_CONNECTOR" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_TYPE" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_PACKAGE" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_FUNCTION" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_ENUMERATION" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_PREDEFINED_INT" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_PREDEFINED_REAL" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_PREDEFINED_STRING" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_PREDEFINED_BOOL" eSuperTypes="#//Restriction/uRestriction"/>
    <eClassifiers xsi:type="ecore:EClass" name="R_PREDEFINED_ENUM" eSuperTypes="#//Restriction/uRestriction"/>
  </eSubpackages>
  <eSubpackages name="Annotation" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Annotation"
      nsPrefix="Annotation">
    <eClassifiers xsi:type="ecore:EClass" name="uAnnotation" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="ANNOTATION" eSuperTypes="#//Annotation/uAnnotation">
      <eStructuralFeatures xsi:type="ecore:EReference" name="elementArgs" upperBound="-1"
          eType="#//ElementArg/uElementArg" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Comment" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Comment"
      nsPrefix="Comment">
    <eClassifiers xsi:type="ecore:EClass" name="uComment" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="COMMENT" eSuperTypes="#//Comment/uComment">
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotation_" eType="#//Annotation/uAnnotation"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="comment" eType="#//Comment/uComment"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="ExternalDecl" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/ExternalDecl"
      nsPrefix="ExternalDecl">
    <eClassifiers xsi:type="ecore:EClass" name="uExternalDecl" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="EXTERNALDECL" eSuperTypes="#//ExternalDecl/uExternalDecl">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="funcName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="lang" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="output_" eType="#//ComponentRef/uComponentRef"
          containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="args" upperBound="-1"
          eType="#//Exp/uExp" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="annotation_" eType="#//Annotation/uAnnotation"
          containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="Iterators" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/Iterators"
      nsPrefix="Iterators">
    <eClassifiers xsi:type="ecore:EClass" name="ForIterator">
      <eStructuralFeatures xsi:type="ecore:EReference" name="tuple" eType="#//Iterators/tuple_ForIterator"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="tuple_ForIterator">
      <eStructuralFeatures xsi:type="ecore:EAttribute" name="Ident" lowerBound="1"
          eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="Exp" eType="#//Exp/uExp"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="ForIterators">
      <eStructuralFeatures xsi:type="ecore:EReference" name="forIterator" upperBound="-1"
          eType="#//Iterators/ForIterator" containment="true"/>
    </eClassifiers>
  </eSubpackages>
  <eSubpackages name="TypeSpec" nsURI="http://www.openmodelica.org/openmodelica.abstract.syntax/TypeSpec"
      nsPrefix="TypeSpec">
    <eClassifiers xsi:type="ecore:EClass" name="uTypeSpec" abstract="true"/>
    <eClassifiers xsi:type="ecore:EClass" name="TPATH" eSuperTypes="#//TypeSpec/uTypeSpec">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="arrayDim" eType="#//ArrayDim/ArrayDim"
          containment="true"/>
    </eClassifiers>
    <eClassifiers xsi:type="ecore:EClass" name="TCOMPLEX" eSuperTypes="#//TypeSpec/uTypeSpec">
      <eStructuralFeatures xsi:type="ecore:EReference" name="path" lowerBound="1"
          eType="#//Path/uPath" containment="true"/>
      <eStructuralFeatures xsi:type="ecore:EReference" name="typeSpecs" upperBound="-1"
          eType="#//TypeSpec/uTypeSpec" containment="true"/>
    </eClassifiers>
  </eSubpackages>
</ecore:EPackage>
