<?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="fiacre" nsURI="http://www.irit.fr/fiacre/xtext/Fiacre" nsPrefix="fiacre">
  <eClassifiers xsi:type="ecore:EClass" name="Model">
    <eStructuralFeatures xsi:type="ecore:EReference" name="imports" upperBound="-1"
        eType="#//ImportDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="declarations" upperBound="-1"
        eType="#//Declaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="requirements" upperBound="-1"
        eType="#//Requirement" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="root" upperBound="-1" eType="#//Root"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RootDeclaration"/>
  <eClassifiers xsi:type="ecore:EClass" name="Root">
    <eStructuralFeatures xsi:type="ecore:EReference" name="declaration" eType="#//RootDeclaration"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="observed" unique="false"
        upperBound="-1" eType="#//RootDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NamedElement">
    <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="TypeDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="ConstantDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="ExpressionDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="ReferenceDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="UnionTagDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="RecordFieldDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="PatternDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="BoundDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="PathDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="PropertyDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="ImportDeclaration">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="importURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Declaration" eSuperTypes="#//NamedElement"/>
  <eClassifiers xsi:type="ecore:EClass" name="ParameterizedDeclaration" eSuperTypes="#//Declaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
        eType="#//ParametersDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="variables" upperBound="-1"
        eType="#//VariablesDeclaration" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDeclaration" eSuperTypes="#//ExpressionDeclarationUse #//ParameterizedDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="statement" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypeDeclaration" eSuperTypes="#//TypeDeclarationUse #//Declaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Type"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ChannelDeclaration" eSuperTypes="#//TypeDeclarationUse #//Declaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//ChannelType"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ChannelType">
    <eStructuralFeatures xsi:type="ecore:EReference" name="size" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="in" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="out" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Type"/>
  <eClassifiers xsi:type="ecore:EClass" name="BasicType" eSuperTypes="#//Type"/>
  <eClassifiers xsi:type="ecore:EClass" name="RangeType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="minimum" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="maximum" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnionType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="tags" upperBound="-1" eType="#//UnionTags"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnionTags">
    <eStructuralFeatures xsi:type="ecore:EReference" name="tags" upperBound="-1" eType="#//UnionTagDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnionTagDeclaration" eSuperTypes="#//NamedElement #//ExpressionDeclarationUse #//UnionTagDeclarationUse #//PatternDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="RecordType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="fields" upperBound="-1"
        eType="#//RecordFields" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordFields">
    <eStructuralFeatures xsi:type="ecore:EReference" name="fields" upperBound="-1"
        eType="#//RecordFieldDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordFieldDeclaration" eSuperTypes="#//NamedElement #//RecordFieldDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="QueueType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="size" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="size" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ReferencedType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//TypeDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ConstantDeclaration" eSuperTypes="#//ConstantDeclarationUse #//ExpressionDeclarationUse #//BoundDeclarationUse #//Declaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ProcessDeclaration" eSuperTypes="#//RootDeclaration #//PathDeclarationUse #//ParameterizedDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
        eType="#//PortsDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="localPorts" upperBound="-1"
        eType="#//PortsDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="priorities" upperBound="-1"
        eType="#//PriorityDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="states" upperBound="-1"
        eType="#//StateDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="prelude" eType="#//Statement"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="transitions" upperBound="-1"
        eType="#//Transition" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="StateDeclaration" eSuperTypes="#//NamedElement"/>
  <eClassifiers xsi:type="ecore:EClass" name="TransitionSource">
    <eStructuralFeatures xsi:type="ecore:EReference" name="origin" eType="#//StateDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Transition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//TransitionSource"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="action" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComponentDeclaration" eSuperTypes="#//RootDeclaration #//PathDeclarationUse #//ParameterizedDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
        eType="#//PortsDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="localPorts" upperBound="-1"
        eType="#//LocalPortsDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="priorities" upperBound="-1"
        eType="#//PriorityDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="prelude" eType="#//Statement"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Composition"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PortsDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
        eType="#//PortDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ChannelType"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PortDeclaration" eSuperTypes="#//NamedElement #//ExpressionDeclarationUse #//PatternDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="LocalPortsDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
        eType="#//PortDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//ChannelType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LowerBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//UpperBound"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ParametersDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
        eType="#//ParameterDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="read" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="write" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ParameterDeclaration" eSuperTypes="#//NamedElement #//ExpressionDeclarationUse #//ReferenceDeclarationUse #//PatternDeclarationUse">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="array" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="size" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="VariablesDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variables" upperBound="-1"
        eType="#//VariableDeclaration" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="VariableDeclaration" eSuperTypes="#//NamedElement #//ExpressionDeclarationUse #//ReferenceDeclarationUse #//PatternDeclarationUse #//BoundDeclarationUse #//PropertyDeclarationUse"/>
  <eClassifiers xsi:type="ecore:EClass" name="PriorityDeclaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="groups" upperBound="-1"
        eType="#//PriorityGroup" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PriorityGroup">
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" unique="false" upperBound="-1"
        eType="#//PortDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Statement"/>
  <eClassifiers xsi:type="ecore:EClass" name="BlockStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ReturnStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NullStatement" eSuperTypes="#//Statement"/>
  <eClassifiers xsi:type="ecore:EClass" name="TaggedStatement" eSuperTypes="#//Statement">
    <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="PatternStatement" eSuperTypes="#//Statement"/>
  <eClassifiers xsi:type="ecore:EClass" name="Pattern" eSuperTypes="#//PatternStatement"/>
  <eClassifiers xsi:type="ecore:EClass" name="AnyPattern" eSuperTypes="#//Pattern"/>
  <eClassifiers xsi:type="ecore:EClass" name="ConstantPattern" eSuperTypes="#//Pattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//LiteralExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="IntegerPattern" eSuperTypes="#//Pattern">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="negative" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <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="IdentifierPattern" eSuperTypes="#//Pattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="declaration" eType="#//PatternDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ConditionalStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="then" eType="#//Statement"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="elseif" upperBound="-1"
        eType="#//ExtendedConditionalStatement" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="else" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ExtendedConditionalStatement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="then" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SelectStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="WhileStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ForeachStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ToStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="state" eType="#//StateDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="CaseStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="pattern" upperBound="-1"
        eType="#//Pattern" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="body" upperBound="-1" eType="#//Statement"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LoopStatement" eSuperTypes="#//Statement"/>
  <eClassifiers xsi:type="ecore:EClass" name="OnStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="WaitStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LowerBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//UpperBound"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Composition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="global" eType="#//PortSet"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="blocks" upperBound="-1"
        eType="#//Block" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Block">
    <eStructuralFeatures xsi:type="ecore:EReference" name="local" eType="#//PortSet"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="CompositeBlock" eSuperTypes="#//Block">
    <eStructuralFeatures xsi:type="ecore:EReference" name="composition" eType="#//Composition"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="InstanceDeclaration" eSuperTypes="#//PathDeclarationUse #//Block">
    <eStructuralFeatures xsi:type="ecore:EReference" name="instance" eType="#//ComponentInstance"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PortSet">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="allPorts" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComponentInstance">
    <eStructuralFeatures xsi:type="ecore:EReference" name="component" eType="#//ParameterizedDeclaration"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
        eType="#//Expression" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Expression"/>
  <eClassifiers xsi:type="ecore:EClass" name="ValueExpression"/>
  <eClassifiers xsi:type="ecore:EClass" name="ReferenceExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="declaration" eType="#//ReferenceDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="IdentifierExpression" eSuperTypes="#//ValueExpression #//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="declaration" eType="#//ExpressionDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordExpression" eSuperTypes="#//ValueExpression #//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="fields" upperBound="-1"
        eType="#//FieldExpression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="FieldExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="field" eType="#//RecordFieldDeclarationUse"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayExpression" eSuperTypes="#//ValueExpression #//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="values" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="QueueExpression" eSuperTypes="#//ValueExpression #//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="values" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EnqueueExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="element" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="queue" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AppendExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LiteralExpression" eSuperTypes="#//ValueExpression #//Expression"/>
  <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteral" eSuperTypes="#//LiteralExpression"/>
  <eClassifiers xsi:type="ecore:EClass" name="NaturalLiteral" eSuperTypes="#//LiteralExpression">
    <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="LowerBound">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="left" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="right" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UpperBound"/>
  <eClassifiers xsi:type="ecore:EClass" name="NaturalLowerBound" eSuperTypes="#//LowerBound">
    <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="NaturalUpperBound" eSuperTypes="#//UpperBound">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="left" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="right" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="DecimalLowerBound" eSuperTypes="#//LowerBound">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="DecimalUpperBound" eSuperTypes="#//UpperBound">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="left" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="right" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="VariableLowerBound" eSuperTypes="#//LowerBound">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//BoundDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="VariableUpperBound" eSuperTypes="#//UpperBound">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//BoundDeclarationUse"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="left" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="right" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="InfiniteUpperBound" eSuperTypes="#//UpperBound"/>
  <eClassifiers xsi:type="ecore:EClass" name="Requirement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="property" eType="#//PropertyDeclaration"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="positive" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="negative" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PropertyDeclaration" eSuperTypes="#//PropertyDeclarationUse #//Declaration">
    <eStructuralFeatures xsi:type="ecore:EReference" name="property" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Property"/>
  <eClassifiers xsi:type="ecore:EClass" name="PatternProperty" eSuperTypes="#//Property"/>
  <eClassifiers xsi:type="ecore:EClass" name="LTLPattern" eSuperTypes="#//PatternProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="property" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="DeadlockFreePattern" eSuperTypes="#//PatternProperty"/>
  <eClassifiers xsi:type="ecore:EClass" name="InfinitelyOftenPattern" eSuperTypes="#//PatternProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MortalPattern" eSuperTypes="#//PatternProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PresencePattern" eSuperTypes="#//PatternProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lasting" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="after" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="lower" eType="#//LowerBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="upper" eType="#//UpperBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="until" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="before" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="min" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="max" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AbsencePattern" eSuperTypes="#//PatternProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="after" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="lower" eType="#//LowerBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="upper" eType="#//UpperBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="until" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="before" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="min" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="max" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AlwaysPattern" eSuperTypes="#//PatternProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="before" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="after" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="until" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="min" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="max" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SequencePattern" eSuperTypes="#//PatternProperty"/>
  <eClassifiers xsi:type="ecore:EClass" name="LTLProperty"/>
  <eClassifiers xsi:type="ecore:EClass" name="StateEvent" eSuperTypes="#//ObservableEvent">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EnterStateEvent" eSuperTypes="#//StateEvent"/>
  <eClassifiers xsi:type="ecore:EClass" name="LeaveStateEvent" eSuperTypes="#//StateEvent"/>
  <eClassifiers xsi:type="ecore:EClass" name="Observable" eSuperTypes="#//SequencePattern"/>
  <eClassifiers xsi:type="ecore:EClass" name="ObservableEvent" eSuperTypes="#//LTLProperty #//Observable"/>
  <eClassifiers xsi:type="ecore:EClass" name="PathEvent" eSuperTypes="#//ObservableEvent">
    <eStructuralFeatures xsi:type="ecore:EReference" name="path" eType="#//Path" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="item" eType="#//Subject"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Path">
    <eStructuralFeatures xsi:type="ecore:EReference" name="items" upperBound="-1"
        eType="#//PathItem" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PathItem"/>
  <eClassifiers xsi:type="ecore:EClass" name="NaturalItem" eSuperTypes="#//PathItem">
    <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="NamedItem" eSuperTypes="#//PathItem">
    <eStructuralFeatures xsi:type="ecore:EReference" name="declaration" eType="#//PathDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Subject"/>
  <eClassifiers xsi:type="ecore:EClass" name="StateSubject" eSuperTypes="#//Subject">
    <eStructuralFeatures xsi:type="ecore:EReference" name="state" eType="#//StateDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ValueSubject" eSuperTypes="#//Subject">
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TagSubject" eSuperTypes="#//Subject">
    <eStructuralFeatures xsi:type="ecore:EReference" name="tag" eType="#//TaggedStatement"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EventSubject" eSuperTypes="#//Subject">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="event" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TupleType" eSuperTypes="#//Type">
    <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1"
        eType="#//Type" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NaturalType" eSuperTypes="#//BasicType"/>
  <eClassifiers xsi:type="ecore:EClass" name="IntegerType" eSuperTypes="#//BasicType"/>
  <eClassifiers xsi:type="ecore:EClass" name="BooleanType" eSuperTypes="#//BasicType"/>
  <eClassifiers xsi:type="ecore:EClass" name="UnlessStatement" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="followers" upperBound="-1"
        eType="#//Statement" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="StatementChoice" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="choices" upperBound="-1"
        eType="#//Statement" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="StatementSequence" eSuperTypes="#//Statement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="statements" upperBound="-1"
        eType="#//Statement" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AssignStatement" eSuperTypes="#//PatternStatement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="patterns" upperBound="-1"
        eType="#//Pattern" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="values" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AssignAnyStatement" eSuperTypes="#//PatternStatement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="patterns" upperBound="-1"
        eType="#//Pattern" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SendStatement" eSuperTypes="#//PatternStatement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="port" eType="#//Pattern"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="values" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ReceiveStatement" eSuperTypes="#//PatternStatement">
    <eStructuralFeatures xsi:type="ecore:EReference" name="port" eType="#//Pattern"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="patterns" upperBound="-1"
        eType="#//Pattern" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ConstructorPattern" eSuperTypes="#//IdentifierPattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
        eType="#//Pattern" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayAccessPattern" eSuperTypes="#//IdentifierPattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//IdentifierPattern"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordAccessPattern" eSuperTypes="#//IdentifierPattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//IdentifierPattern"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="field" eType="#//RecordFieldDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AllExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ExistsExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Conditional" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="then" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="else" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Disjunction" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Implication" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Conjunction" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComparisonEqual" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComparisonNotEqual" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComparisonLesser" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComparisonLesserEqual" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComparisonGreater" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ComparisonGreaterEqual" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Addition" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Substraction" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Multiplication" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Division" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Modulo" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryPlusExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryMinusExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryNegationExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryFirstExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryLengthExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryCoerceExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryFullExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryDeQueueExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="UnaryEmptyExpression" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Projection" eSuperTypes="#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="channel" eType="#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="field" eType="#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ConstructionExpression" eSuperTypes="#//IdentifierExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ArrayAccessExpression" eSuperTypes="#//IdentifierExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//IdentifierExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="indexes" upperBound="-1"
        eType="#//Expression" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="RecordAccessExpression" eSuperTypes="#//IdentifierExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//IdentifierExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="field" eType="#//RecordFieldDeclaration"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TrueLiteral" eSuperTypes="#//BooleanLiteral"/>
  <eClassifiers xsi:type="ecore:EClass" name="FalseLiteral" eSuperTypes="#//BooleanLiteral"/>
  <eClassifiers xsi:type="ecore:EClass" name="AllProperty" eSuperTypes="#//Property">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ExistsProperty" eSuperTypes="#//Property">
    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PropertyDisjunction" eSuperTypes="#//Property">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Property"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PropertyImplication" eSuperTypes="#//Property">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Property"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PropertyConjunction" eSuperTypes="#//Property">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Property"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PropertyNegation" eSuperTypes="#//Property">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Property"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LeadsToPattern" eSuperTypes="#//SequencePattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="follower" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="before" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="lower" eType="#//LowerBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="upper" eType="#//UpperBound"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="after" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="until" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="min" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="max" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PrecedesPattern" eSuperTypes="#//SequencePattern">
    <eStructuralFeatures xsi:type="ecore:EReference" name="subject" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="follower" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="before" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="after" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="until" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="min" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="max" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLAll" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLExists" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//VariableDeclaration"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//RangeType"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLDisjunction" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LTLProperty"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLImplication" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LTLProperty"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLConjunction" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LTLProperty"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLUntil" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LTLProperty"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLRelease" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//LTLProperty"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLUnaryNegation" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLUnaryNext" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLUnaryAlways" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLUnaryEventually" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//LTLProperty"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LTLVariable" eSuperTypes="#//LTLProperty">
    <eStructuralFeatures xsi:type="ecore:EReference" name="declaration" eType="#//PropertyDeclarationUse"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ObservableDisjunction" eSuperTypes="#//Observable">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ObservableImplication" eSuperTypes="#//Observable">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ObservableConjunction" eSuperTypes="#//Observable">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="#//Observable"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ObservableNegation" eSuperTypes="#//Observable">
    <eStructuralFeatures xsi:type="ecore:EReference" name="child" eType="#//Observable"
        containment="true"/>
  </eClassifiers>
</ecore:EPackage>
