<?xml version="1.0" ?>
<lexer>
  <config>
    <name>Sed</name>
    <alias>sed</alias>
    <alias>gsed</alias>
    <alias>ssed</alias>
    <filename>*.sed</filename>
    <filename>*.[gs]sed</filename>
    <mime_type>text/x-sed</mime_type>
  </config>
  <rules>
    <state name="root">
      <rule pattern="\s+">
        <token type="TextWhitespace" />
      </rule>
      <rule pattern="#.*$">
        <token type="CommentSingle" />
      </rule>
      <rule pattern="[0-9]+">
        <token type="LiteralNumberInteger" />
      </rule>
      <rule pattern="\$">
        <token type="Operator" />
      </rule>
      <rule pattern="[{};,!]">
        <token type="Punctuation" />
      </rule>
      <rule pattern="[dDFgGhHlnNpPqQxz=]">
        <token type="Keyword" />
      </rule>
      <rule pattern="([berRtTvwW:])([^;\n]*)">
        <bygroups>
          <token type="Keyword" />
          <token type="LiteralStringSingle" />
        </bygroups>
      </rule>
      <rule pattern="([aci])((?:.*?\\\n)*(?:.*?[^\\]$))">
        <bygroups>
          <token type="Keyword" />
          <token type="LiteralStringDouble" />
        </bygroups>
      </rule>
      <rule pattern="([qQ])([0-9]*)">
        <bygroups>
          <token type="Keyword" />
          <token type="LiteralNumberInteger" />
        </bygroups>
      </rule>
      <rule pattern="(/)((?:(?:\\[^\n]|[^\\])*?\\\n)*?(?:\\.|[^\\])*?)(/)">
        <bygroups>
          <token type="Punctuation" />
          <token type="LiteralStringRegex" />
          <token type="Punctuation" />
        </bygroups>
      </rule>
      <rule pattern="(\\(.))((?:(?:\\[^\n]|[^\\])*?\\\n)*?(?:\\.|[^\\])*?)(\2)">
        <bygroups>
          <token type="Punctuation" />
          <token type="Text" />
          <token type="LiteralStringRegex" />
          <token type="Punctuation" />
        </bygroups>
      </rule>
      <rule
        pattern="(y)(.)((?:(?:\\[^\n]|[^\\])*?\\\n)*?(?:\\.|[^\\])*?)(\2)((?:(?:\\[^\n]|[^\\])*?\\\n)*?(?:\\.|[^\\])*?)(\2)"
      >
        <bygroups>
          <token type="Keyword" />
          <token type="Punctuation" />
          <token type="LiteralStringSingle" />
          <token type="Punctuation" />
          <token type="LiteralStringSingle" />
          <token type="Punctuation" />
        </bygroups>
      </rule>
      <rule
        pattern="(s)(.)((?:(?:\\[^\n]|[^\\])*?\\\n)*?(?:\\.|[^\\])*?)(\2)((?:(?:\\[^\n]|[^\\])*?\\\n)*?(?:\\.|[^\\])*?)(\2)((?:[gpeIiMm]|[0-9])*)"
      >
        <bygroups>
          <token type="Keyword" />
          <token type="Punctuation" />
          <token type="LiteralStringRegex" />
          <token type="Punctuation" />
          <token type="LiteralStringSingle" />
          <token type="Punctuation" />
          <token type="Keyword" />
        </bygroups>
      </rule>
    </state>
  </rules>
</lexer>
