<?xml version="1.0" encoding="ASCII"?>
<xtext:Grammar 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" xmlns:xtext="http://www.eclipse.org/2008/Xtext" name="org.wesnoth.WML" definesHiddenTokens="true" hiddenTokens="//@rules.32 //@rules.33 //@rules.35">
  <metamodelDeclarations xsi:type="xtext:GeneratedMetamodel" name="wml">
    <ePackage href="http://www.wesnoth.org/WML#/"/>
  </metamodelDeclarations>
  <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
    <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
  </metamodelDeclarations>
  <rules xsi:type="xtext:ParserRule" name="WMLRoot">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLRoot"/>
    </type>
    <alternatives xsi:type="xtext:Assignment" cardinality="*" feature="Expressions" operator="+=">
      <terminal xsi:type="xtext:RuleCall" rule="//@rules.10"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLGrammarElement">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLGrammarElement"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.0"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.12"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.4"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.6"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLTag">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLTag"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="["/>
      <elements xsi:type="xtext:Assignment" cardinality="?" feature="plus" operator="=">
        <terminal xsi:type="xtext:Keyword" value="+"/>
      </elements>
      <elements xsi:type="xtext:Assignment" feature="name" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.31"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="]"/>
      <elements xsi:type="xtext:Assignment" cardinality="*" feature="Expressions" operator="+=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.11"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="[/"/>
      <elements xsi:type="xtext:Assignment" feature="endName" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.31"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="]"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLKey" definesHiddenTokens="true" hiddenTokens="//@rules.33">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLKey"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Assignment" feature="name" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.31"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="="/>
      <elements xsi:type="xtext:Assignment" cardinality="*" feature="values" operator="+=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.4"/>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="*">
        <elements xsi:type="xtext:RuleCall" cardinality="?" rule="//@rules.32"/>
        <elements xsi:type="xtext:Keyword" value="+"/>
        <elements xsi:type="xtext:RuleCall" cardinality="?" rule="//@rules.32"/>
        <elements xsi:type="xtext:Assignment" cardinality="+" feature="values" operator="+=">
          <terminal xsi:type="xtext:RuleCall" rule="//@rules.4"/>
        </elements>
      </elements>
      <elements xsi:type="xtext:Assignment" feature="eol" operator="+=">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:RuleCall" rule="//@rules.32"/>
          <elements xsi:type="xtext:RuleCall" rule="//@rules.35"/>
        </terminal>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLKeyValue">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLKeyValue"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.16"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.5"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.14"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.7"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLMacroCall">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLMacroCall"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="{"/>
      <elements xsi:type="xtext:Assignment" cardinality="?" feature="point" operator="=">
        <terminal xsi:type="xtext:Keyword" value="./"/>
      </elements>
      <elements xsi:type="xtext:Assignment" cardinality="?" feature="relative" operator="=">
        <terminal xsi:type="xtext:Keyword" value="~"/>
      </elements>
      <elements xsi:type="xtext:Assignment" feature="name" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.31"/>
      </elements>
      <elements xsi:type="xtext:Assignment" cardinality="*" feature="Parameters" operator="+=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.6"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="}"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLMacroCallParameter">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLMacroCallParameter"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.15"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.5"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLArrayCall">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLArrayCall"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="["/>
      <elements xsi:type="xtext:Assignment" cardinality="+" feature="value" operator="+=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.16"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="]"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLMacroDefine">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLMacroDefine"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Assignment" feature="name" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.27"/>
      </elements>
      <elements xsi:type="xtext:Assignment" cardinality="*" feature="Expressions" operator="+=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.12"/>
      </elements>
      <elements xsi:type="xtext:Assignment" feature="endName" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.28"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLPreprocIF">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLPreprocIF"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Assignment" feature="name" operator="=">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:RuleCall" rule="//@rules.21"/>
          <elements xsi:type="xtext:RuleCall" rule="//@rules.24"/>
          <elements xsi:type="xtext:RuleCall" rule="//@rules.19"/>
          <elements xsi:type="xtext:RuleCall" rule="//@rules.20"/>
          <elements xsi:type="xtext:RuleCall" rule="//@rules.22"/>
          <elements xsi:type="xtext:RuleCall" rule="//@rules.23"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Assignment" cardinality="*" feature="Expressions" operator="+=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.12"/>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Assignment" feature="Elses" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="//@rules.25"/>
        </elements>
        <elements xsi:type="xtext:Assignment" cardinality="+" feature="ElseExpressions" operator="+=">
          <terminal xsi:type="xtext:RuleCall" rule="//@rules.12"/>
        </elements>
      </elements>
      <elements xsi:type="xtext:Assignment" feature="endName" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="//@rules.26"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLRootExpression">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLRootExpression"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.2"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.5"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.8"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.13"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.9"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLExpression">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLExpression"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.10"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.3"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLValuedExpression">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLValuedExpression"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.11"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.16"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLTextdomain">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLTextdomain"/>
    </type>
    <alternatives xsi:type="xtext:Assignment" feature="name" operator="=">
      <terminal xsi:type="xtext:RuleCall" rule="//@rules.29"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLLuaCode">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLLuaCode"/>
    </type>
    <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
      <terminal xsi:type="xtext:RuleCall" rule="//@rules.18"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLMacroParameter">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLMacroParameter"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives">
      <elements xsi:type="xtext:RuleCall" rule="//@rules.16"/>
      <elements xsi:type="xtext:RuleCall" rule="//@rules.17"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="WMLValue">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//WMLValue"/>
    </type>
    <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
      <terminal xsi:type="xtext:Alternatives">
        <elements xsi:type="xtext:RuleCall" rule="//@rules.31"/>
        <elements xsi:type="xtext:RuleCall" rule="//@rules.30"/>
        <elements xsi:type="xtext:Keyword" value="_"/>
        <elements xsi:type="xtext:Keyword" value="~"/>
        <elements xsi:type="xtext:Keyword" value="."/>
        <elements xsi:type="xtext:Keyword" value="./"/>
        <elements xsi:type="xtext:Keyword" value="$"/>
        <elements xsi:type="xtext:Keyword" value="/"/>
        <elements xsi:type="xtext:Keyword" value="("/>
        <elements xsi:type="xtext:Keyword" value=")"/>
        <elements xsi:type="xtext:RuleCall" rule="//@rules.34"/>
      </terminal>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:ParserRule" name="MacroTokens">
    <type metamodel="//@metamodelDeclarations.0">
      <classifier xsi:type="ecore:EClass" href="http://www.wesnoth.org/WML#//MacroTokens"/>
    </type>
    <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
      <terminal xsi:type="xtext:Alternatives">
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Keyword" value="["/>
        <elements xsi:type="xtext:Keyword" value="]"/>
        <elements xsi:type="xtext:Keyword" value="+"/>
        <elements xsi:type="xtext:Keyword" value="[/"/>
      </terminal>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="LUA_CODE">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="&lt;&lt;"/>
      <elements xsi:type="xtext:UntilToken">
        <terminal xsi:type="xtext:Keyword" value=">>"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="IFHAVE">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#ifhave"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="IFNHAVE">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#ifnhave"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="IFDEF">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#ifdef"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="IFVER">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#ifver"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="IFNVER">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#ifnver"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="IFNDEF">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#ifndef"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="ELSE">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#else"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="ENDIF">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#endif"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="DEFINE">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#define"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="ENDDEF">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#enddef"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="TEXTDOMAIN">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#textdomain"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="STRING">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="&quot;"/>
      <elements xsi:type="xtext:Alternatives" cardinality="*">
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Keyword" value="\"/>
          <elements xsi:type="xtext:Alternatives">
            <elements xsi:type="xtext:Keyword" value="b"/>
            <elements xsi:type="xtext:Keyword" value="t"/>
            <elements xsi:type="xtext:Keyword" value="n"/>
            <elements xsi:type="xtext:Keyword" value="f"/>
            <elements xsi:type="xtext:Keyword" value="r"/>
            <elements xsi:type="xtext:Keyword" value="&quot;"/>
            <elements xsi:type="xtext:Keyword" value="'"/>
            <elements xsi:type="xtext:Keyword" value="\"/>
          </elements>
        </elements>
        <elements xsi:type="xtext:NegatedToken">
          <terminal xsi:type="xtext:Alternatives">
            <elements xsi:type="xtext:Keyword" value="\"/>
            <elements xsi:type="xtext:Keyword" value="&quot;"/>
          </terminal>
        </elements>
      </elements>
      <elements xsi:type="xtext:Keyword" value="&quot;"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="ID">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives" cardinality="+">
      <elements xsi:type="xtext:CharacterRange">
        <left value="a"/>
        <right value="z"/>
      </elements>
      <elements xsi:type="xtext:CharacterRange">
        <left value="A"/>
        <right value="Z"/>
      </elements>
      <elements xsi:type="xtext:CharacterRange">
        <left value="0"/>
        <right value="9"/>
      </elements>
      <elements xsi:type="xtext:Keyword" value="_"/>
      <elements xsi:type="xtext:Keyword" value="-"/>
      <elements xsi:type="xtext:Keyword" value=","/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="EOL">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
      <elements xsi:type="xtext:Keyword" value="&#xA;"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="WS">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Alternatives" cardinality="+">
      <elements xsi:type="xtext:Keyword" value=" "/>
      <elements xsi:type="xtext:Keyword" value="&#x9;"/>
    </alternatives>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="ANY_OTHER">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Wildcard"/>
  </rules>
  <rules xsi:type="xtext:TerminalRule" name="SL_COMMENT">
    <type metamodel="//@metamodelDeclarations.1">
      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    </type>
    <alternatives xsi:type="xtext:Group">
      <elements xsi:type="xtext:Keyword" value="#"/>
      <elements xsi:type="xtext:NegatedToken" cardinality="*">
        <terminal xsi:type="xtext:Alternatives">
          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
          <elements xsi:type="xtext:Keyword" value="&#xD;"/>
        </terminal>
      </elements>
      <elements xsi:type="xtext:Group" cardinality="?">
        <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
      </elements>
    </alternatives>
  </rules>
</xtext:Grammar>
