1<lexer>
  2  <config>
  3    <name>Beef</name>
  4    <alias>beef</alias>
  5    <filename>*.bf</filename>
  6    <mime_type>text/x-beef</mime_type>
  7    <dot_all>true</dot_all>
  8    <ensure_nl>true</ensure_nl>
  9  </config>
 10  <rules>
 11    <state name="root">
 12      <rule pattern="^\s*\[.*?\]">
 13        <token type="NameAttribute"/>
 14      </rule>
 15      <rule pattern="[^\S\n]+">
 16        <token type="Text"/>
 17      </rule>
 18      <rule pattern="\\\n">
 19        <token type="Text"/>
 20      </rule>
 21      <rule pattern="///[^\n\r]*">
 22        <token type="CommentSpecial"/>
 23      </rule>
 24      <rule pattern="//[^\n\r]*">
 25        <token type="CommentSingle"/>
 26      </rule>
 27      <rule pattern="/[*].*?[*]/">
 28        <token type="CommentMultiline"/>
 29      </rule>
 30      <rule pattern="\n">
 31        <token type="Text"/>
 32      </rule>
 33      <rule pattern="[~!%^&*()+=|\[\]:;,.<>/?-]">
 34        <token type="Punctuation"/>
 35      </rule>
 36      <rule pattern="[{}]">
 37        <token type="Punctuation"/>
 38      </rule>
 39      <rule pattern="@"(""|[^"])*"">
 40        <token type="LiteralString"/>
 41      </rule>
 42      <rule pattern="\$@?"(""|[^"])*"">
 43        <token type="LiteralString"/>
 44      </rule>
 45      <rule pattern=""(\\\\|\\"|[^"\n])*["\n]">
 46        <token type="LiteralString"/>
 47      </rule>
 48      <rule pattern="'\\.'|'[^\\]'">
 49        <token type="LiteralStringChar"/>
 50      </rule>
 51      <rule pattern="0[xX][0-9a-fA-F]+[Ll]?|\d[_\d]*(\.\d*)?([eE][+-]?\d+)?[flFLdD]?">
 52        <token type="LiteralNumber"/>
 53      </rule>
 54      <rule pattern="#[ \t]*(if|endif|else|elif|define|undef|line|error|warning|region|endregion|pragma|nullable)\b">
 55        <token type="CommentPreproc"/>
 56      </rule>
 57      <rule pattern="\b(extern)(\s+)(alias)\b">
 58        <bygroups>
 59          <token type="Keyword"/>
 60          <token type="Text"/>
 61          <token type="Keyword"/>
 62        </bygroups>
 63      </rule>
 64      <rule pattern="(as|await|base|break|by|case|catch|checked|continue|default|delegate|else|event|finally|fixed|for|repeat|goto|if|in|init|is|let|lock|new|scope|on|out|params|readonly|ref|return|sizeof|stackalloc|switch|this|throw|try|typeof|unchecked|virtual|void|while|get|set|new|yield|add|remove|value|alias|ascending|descending|from|group|into|orderby|select|thenby|where|join|equals)\b">
 65        <token type="Keyword"/>
 66      </rule>
 67      <rule pattern="(global)(::)">
 68        <bygroups>
 69          <token type="Keyword"/>
 70          <token type="Punctuation"/>
 71        </bygroups>
 72      </rule>
 73      <rule pattern="(abstract|async|const|enum|explicit|extern|implicit|internal|operator|override|partial|extension|private|protected|public|static|sealed|unsafe|volatile)\b">
 74        <token type="KeywordDeclaration"/>
 75      </rule>
 76      <rule pattern="(bool|byte|char8|char16|char32|decimal|double|float|int|int8|int16|int32|int64|long|object|sbyte|short|string|uint|uint8|uint16|uint32|uint64|uint|let|var)\b\??">
 77        <token type="KeywordType"/>
 78      </rule>
 79      <rule pattern="(true|false|null)\b">
 80        <token type="KeywordConstant"/>
 81      </rule>
 82      <rule pattern="(class|struct|record|interface)(\s+)">
 83        <bygroups>
 84          <token type="Keyword"/>
 85          <token type="Text"/>
 86        </bygroups>
 87        <push state="class"/>
 88      </rule>
 89      <rule pattern="(namespace|using)(\s+)">
 90        <bygroups>
 91          <token type="Keyword"/>
 92          <token type="Text"/>
 93        </bygroups>
 94        <push state="namespace"/>
 95      </rule>
 96      <rule pattern="@?[_a-zA-Z]\w*">
 97        <token type="Name"/>
 98      </rule>
 99    </state>
100    <state name="class">
101      <rule pattern="@?[_a-zA-Z]\w*">
102        <token type="NameClass"/>
103        <pop depth="1"/>
104      </rule>
105      <rule>
106        <pop depth="1"/>
107      </rule>
108    </state>
109    <state name="namespace">
110      <rule pattern="(?=\()">
111        <token type="Text"/>
112        <pop depth="1"/>
113      </rule>
114      <rule pattern="(@?[_a-zA-Z]\w*|\.)+">
115        <token type="NameNamespace"/>
116        <pop depth="1"/>
117      </rule>
118    </state>
119  </rules>
120</lexer>