|
| 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> |
0 commit comments