
    </state>
    <state name="root">
      <rule>
        <include state="string"/>
      </rule>
      <rule>
        <include state="punctuation"/>
      </rule>
      <rule>
        <include state="curly"/>
      </rule>
      <rule>
        <include state="basic"/>
      </rule>
      <rule>
        <include state="whitespace"/>
      </rule>
      <rule pattern="[0-9]+">
        <token type="LiteralNumber"/>
      </rule>
    </state>
    <state name="basic">
      <rule pattern="\b(false|true)\b">
        <token type="KeywordType"/>
      </rule>
      <rule pattern="\s*/\*">
        <token type="CommentMultiline"/>
        <push state="comment"/>
      </rule>
      <rule pattern="\s*#.*\n">
        <token type="CommentSingle"/>
      </rule>
      <rule pattern="(.*?)(\s*)(=)">
        <bygroups>
          <token type="Name"/>
          <token type="Text"/>
          <token type="Operator"/>
        </bygroups>
      </rule>
      <rule pattern="\d+">
        <token type="LiteralNumber"/>
      </rule>
      <rule pattern="\b\w+\b">
        <token type="Keyword"/>
      </rule>
      <rule pattern="\$\{">
        <token type="LiteralStringInterpol"/>
        <push state="var_builtin"/>
      </rule>
    </state>
    <state name="curly">
      <rule pattern="\{">
        <token type="TextPunctuation"/>
      </rule>
      <rule pattern="\}">
        <token type="TextPunctuation"/>
      </rule>
    </state>
    <state name="function">
      <rule pattern="(\s+)(&#34;.*&#34;)(\s+)">
        <bygroups>
          <token type="Text"/>
          <token type="LiteralString"/>
          <token type="Text"/>
        </bygroups>
      </rule>
      <rule>
        <include state="punctuation"/>
      </rule>
      <rule>
        <include state="curly"/>
      </rule>
    </state>
    <state name="var_builtin">
      <rule pattern="\$\{">
        <token type="LiteralStringInterpol"/>
        <push/>
      </rule>
      <rule pattern="\b(element|concat|lookup|file|join)\b">
        <token type="NameBuiltin"/>
      </rule>
      <rule>
        <include state="string"/>
      </rule>
      <rule>
        <include state="punctuation"/>
      </rule>
      <rule pattern="\s+">
        <token type="Text"/>
      </rule>
      <rule pattern="\}">
        <token type="LiteralStringInterpol"/>
        <pop depth="1"/>
      </rule>
    </state>
    <state name="comment">
      <rule pattern="[^*/]">
        <token type="CommentMultiline"/>
      </rule>
      <rule pattern="/\*">
        <token type="CommentMultiline"/>
        <push/>
      </rule>
      <rule pattern="\*/">
        <token type="CommentMultiline"/>
        <pop depth="1"/>
      </rule>
      <rule pattern="[*/]">
        <token type="CommentMultiline"/>
      </rule>
    </state>
  </rules>
</lexer>