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?\'.*\'"><token type="Literal"/></rule>
14 <rule pattern="#\|.*$"><token type="LiteralString"/></rule>
15 <rule pattern="(b)(\")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralString"/></bygroups><push state="string.inline"/></rule>
16 <rule pattern="""><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="(\+|\-|\*|/|%|\|>|>>|<<|\&\&|\|\||\&|\||<|>|==)"><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="(=>)|(->)|[\(\)\{\}\[\]:,\.=!?~;]"><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="""><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\"']"><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>