1<lexer>
 2  <config>
 3    <name>MoonBit</name>
 4    <alias>moonbit</alias>
 5    <alias>mbt</alias>
 6    <filename>*.mbt</filename>
 7    <ensure_nl>true</ensure_nl>
 8  </config>
 9  <rules>
10    <state name="root">
11      <rule pattern="#.*$"><token type="CommentPreproc"/></rule>
12      <rule pattern="//.*$"><token type="CommentSingle"/></rule>
13      <rule pattern="b?\&#x27;.*\&#x27;"><token type="Literal"/></rule>
14      <rule pattern="#\|.*$"><token type="LiteralString"/></rule>
15      <rule pattern="(b)(\&quot;)"><bygroups><token type="LiteralStringAffix"/><token type="LiteralString"/></bygroups><push state="string.inline"/></rule>
16      <rule pattern="&quot;"><token type="LiteralString"/><push state="string.inline"/></rule>
17      <rule pattern="\$\|"><token type="LiteralString"/><push state="string.multiline"/></rule>
18      <rule pattern="0(b|B)[01]+"><token type="LiteralNumberBin"/></rule>
19      <rule pattern="0(o|O)[0-7]+"><token type="LiteralNumberOct"/></rule>
20      <rule pattern="0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\.[0-9a-fA-F][0-9a-fA-F_]*(P|p)(\+|\-)?[0-9][0-9]*"><token type="LiteralNumberFloat"/></rule>
21      <rule pattern="0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\.?(P|p)(\+|\-)?[0-9][0-9]*"><token type="LiteralNumberFloat"/></rule>
22      <rule pattern="0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\.[0-9a-fA-F][0-9a-fA-F_]*"><token type="LiteralNumberFloat"/></rule>
23      <rule pattern="0(x|X)[0-9a-fA-F][0-9a-fA-F_]*\."><token type="LiteralNumberFloat"/></rule>
24      <rule pattern="0(x|X)[0-9a-fA-F][0-9a-fA-F_]*"><token type="LiteralNumberHex"/></rule>
25      <rule pattern="\d(_|\d)*U?L"><token type="LiteralNumberIntegerLong"/></rule>
26      <rule pattern="\d(_|\d)*U?"><token type="LiteralNumberInteger"/></rule>
27      <rule pattern="\d+(.\d+)?"><token type="LiteralNumber"/></rule>
28      <rule pattern="(type|type!|enum|struct|trait|typealias|traitalias)\b"><token type="KeywordDeclaration"/></rule>
29      <rule pattern="(async|fn|const|let|mut|impl|with|derive|fnalias)\b"><token type="KeywordDeclaration"/></rule>
30      <rule pattern="(self|Self)\b"><token type="Keyword"/></rule>
31      <rule pattern="(guard|if|while|match|else|loop|for|in|is)\b"><token type="Keyword"/></rule>
32      <rule pattern="(return|break|continue)\b"><token type="Keyword"/></rule>
33      <rule pattern="(try|catch|raise|noraise)\b"><token type="Keyword"/></rule>
34      <rule pattern="\bas\b"><token type="Keyword"/></rule>
35      <rule pattern="(extern|pub|priv|pub\(all\)|pub\(readonly\)|pub\(open\)|test)\b"><token type="Keyword"/></rule>
36      <rule pattern="(true|false)\b"><token type="KeywordConstant"/></rule>
37      <rule pattern="(Eq|Compare|Hash|Show|Default|ToJson|FromJson)\b"><token type="NameBuiltin"/></rule>
38      <rule pattern="(Array|FixedArray|Int|Int64|UInt|UInt64|Option|Result|Byte|Bool|Unit|String|Float|Double)\b"><token type="NameBuiltin"/></rule>
39      <rule pattern="(\+|\-|\*|/|%|\|&gt;|&gt;&gt;|&lt;&lt;|\&amp;\&amp;|\|\||\&amp;|\||&lt;|&gt;|==)"><token type="Operator"/></rule>
40      <rule pattern="(not|lsl|lsr|asr|op_add|op_sub|op_div|op_mul|op_mod|\.\.\.)"><token type="OperatorWord"/></rule>
41      <rule pattern="@[A-Za-z][A-Za-z0-9_/]*\."><token type="NameNamespace"/></rule>
42      <rule pattern="([a-z][A-Za-z0-9_]*)(\s+)(as)(\s+)([a-z][A-Za-z0-9_]*)"><bygroups><token type="NameFunction"/><token type="TextWhitespace"/><token type="Keyword"/><token type="TextWhitespace"/><token type="NameFunction"/></bygroups></rule>
43      <rule pattern="([A-Za-z][A-Za-z0-9_]*)(::)([A-Za-z][A-Za-z0-9_]*)(\s+)(as)(\s+)([a-z][A-Za-z0-9_]*)"><bygroups><token type="NameClass"/><token type="Punctuation"/><token type="NameFunction"/><token type="TextWhitespace"/><token type="Keyword"/><token type="TextWhitespace"/><token type="NameFunction"/></bygroups></rule>
44      <rule pattern="([A-Za-z][A-Za-z0-9_]*)(::)([A-Za-z][A-Za-z0-9_]*)"><bygroups><token type="NameClass"/><token type="Punctuation"/><token type="NameFunction"/></bygroups></rule>
45      <rule pattern="([a-z][A-Za-z0-9_]*)(?=!?\()"><token type="NameFunction"/></rule>
46      <rule pattern="Error"><token type="NameException"/></rule>
47      <rule pattern="(=&gt;)|(-&gt;)|[\(\)\{\}\[\]:,\.=!?~;]"><token type="Punctuation"/></rule>
48      <rule pattern="[a-z][a-zA-Z0-9_]*"><token type="NameVariable"/></rule>
49      <rule pattern="[A-Z_][a-zA-Z0-9_]*"><token type="NameClass"/></rule>
50      <rule pattern="[\s]"><token type="TextWhitespace"/></rule>
51    </state>
52    <state name="string.inline">
53      <rule><include state="escape"/></rule>
54      <rule pattern="\\{"><token type="LiteralStringEscape"/><push state="interpolation"/></rule>
55      <rule pattern="&quot;"><token type="LiteralString"/><pop depth="1"/></rule>
56      <rule pattern="."><token type="LiteralStringDouble"/></rule>
57    </state>
58    <state name="string.multiline">
59      <rule><include state="escape"/></rule>
60      <rule pattern="\\{"><token type="LiteralStringEscape"/><push state="interpolation"/></rule>
61      <rule pattern="\Z"><token type="LiteralString"/><pop depth="1"/></rule>
62      <rule pattern="."><token type="LiteralString"/></rule>
63    </state>
64    <state name="interpolation">
65      <rule pattern="}"><token type="LiteralStringEscape"/><pop depth="1"/></rule>
66      <rule><include state="root"/></rule>
67    </state>
68    <state name="escape">
69      <rule pattern="\\[0\\tnrb\&quot;&#x27;]"><token type="LiteralStringEscape"/></rule>
70      <rule pattern="\\x[0-9a-fA-f]{2}"><token type="LiteralStringEscape"/></rule>
71      <rule pattern="\\u[0-9a-fA-f]{4}"><token type="LiteralStringEscape"/></rule>
72      <rule pattern="\\u[0-9a-fA-f]*"><token type="LiteralStringEscape"/></rule>
73    </state>
74  </rules>
75</lexer>