1<lexer>
2 <config>
3 <name>Odin</name>
4 <alias>odin</alias>
5 <filename>*.odin</filename>
6 <mime_type>text/odin</mime_type>
7 </config>
8 <rules>
9 <state name="NestedComment">
10 <rule pattern = "/[*]">
11 <token type = "CommentMultiline"/>
12 <push/>
13 </rule>
14 <rule pattern = "[*]/">
15 <token type = "CommentMultiline"/>
16 <pop depth = "1"/>
17 </rule>
18 <rule pattern = "[\s\S]">
19 <token type = "CommentMultiline"/>
20 </rule>
21 </state>
22 <state name="root">
23 <rule pattern = "\n">
24 <token type = "TextWhitespace"/>
25 </rule>
26 <rule pattern = "\s+">
27 <token type = "TextWhitespace"/>
28 </rule>
29 <rule pattern = "//.*?\n">
30 <token type = "CommentSingle"/>
31 </rule>
32 <rule pattern = "/[*]">
33 <token type = "CommentMultiline"/>
34 <push state="NestedComment"/>
35 </rule>
36 <rule pattern = "(import|package)\b">
37 <token type = "KeywordNamespace"/>
38 </rule>
39 <rule pattern = "(proc|struct|map|enum|union)\b">
40 <token type = "KeywordDeclaration"/>
41 </rule>
42 <rule pattern = "(asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where|panic|real|imag|len|cap|append|copy|delete|new|make|clearpanic|real|imag|len|cap|append|copy|delete|new|make|clear)\b">
43 <token type = "Keyword"/>
44 </rule>
45 <rule pattern = "(true|false|nil)\b">
46 <token type = "KeywordConstant"/>
47 </rule>
48 <rule pattern = "(uint|u8|u16|u32|u64|int|i8|i16|i32|i64|i16le|i32le|i64le|i128le|u16le|u32le|u64le|u128le|i16be|i32be|i64be|i128be|u16be|u32be|u64be|u128be|f16|f32|f64|complex32|complex64|complex128|quaternion64|quaternion128|quaternion256|byte|rune|string|cstring|typeid|any|bool|b8|b16|b32|b64|uintptr|rawptr)\b">
49 <token type = "KeywordType"/>
50 </rule>
51 <rule pattern = "\#[a-zA-Z_]+\b">
52 <token type = "NameDecorator"/>
53 </rule>
54 <rule pattern = "^\#\+\w+\s*$">
55 <token type = "NameAttribute"/>
56 </rule>
57 <rule pattern = "^(\#\+\w+)(\s+)(\!)?([A-Za-z0-9-_!]+)(?:(,)(\!)?([A-Za-z0-9-_!]+))*\s*$">
58 <bygroups>
59 <token type = "NameAttribute"/>
60 <token type = "TextWhitespace"/>
61 <token type = "Operator"/>
62 <token type = "Name"/>
63 <token type = "Punctuation"/>
64 <token type = "Operator"/>
65 <token type = "Name"/>
66 </bygroups>
67 </rule>
68 <rule pattern = "\@(\([a-zA-Z_]+\b\s*.*\)|\(?[a-zA-Z_]+\)?)">
69 <token type = "NameAttribute"/>
70 </rule>
71 <rule pattern="[a-zA-Z_]\w*">
72 <token type="Name"/>
73 </rule>
74 <rule pattern="([a-zA-Z_]\w*)(\s*)(\()">
75 <token type="NameFunction"/>
76 </rule>
77 <rule pattern="[^\W\d]\w*">
78 <token type="NameOther"/>
79 </rule>
80 <rule pattern = "\d+i">
81 <token type = "LiteralNumber"/>
82 </rule>
83 <rule pattern = "\d+\.\d*([Ee][-+]\d+)?i">
84 <token type = "LiteralNumber"/>
85 </rule>
86 <rule pattern = "\.\d+([Ee][-+]\d+)?i">
87 <token type = "LiteralNumber"/>
88 </rule>
89 <rule pattern = "\d+[Ee][-+]\d+i">
90 <token type = "LiteralNumber"/>
91 </rule>
92 <rule pattern = "\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)">
93 <token type = "LiteralNumberFloat"/>
94 </rule>
95 <rule pattern = "\.\d+([eE][+\-]?\d+)?">
96 <token type = "LiteralNumberFloat"/>
97 </rule>
98 <rule pattern = "0o[0-7]+">
99 <token type = "LiteralNumberOct"/>
100 </rule>
101 <rule pattern = "0x[0-9a-fA-F_]+">
102 <token type = "LiteralNumberHex"/>
103 </rule>
104 <rule pattern = "0b[01_]+">
105 <token type = "LiteralNumberBin"/>
106 </rule>
107 <rule pattern = "(0|[1-9][0-9_]*)">
108 <token type = "LiteralNumberInteger"/>
109 </rule>
110 <rule pattern = "'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'" >
111 <token type = "LiteralStringChar"/>
112 </rule>
113 <rule pattern = "(`)([^`]*)(`)" >
114 <token type = "LiteralString"/>
115 </rule>
116 <rule pattern = ""(\\\\|\\"|[^"])*"" >
117 <token type = "LiteralString"/>
118 </rule>
119 <rule pattern = "(<<=|>>=|<<|>>|<=|>=|&=|&|\+=|-=|\*=|/=|%=|\||\^|=|&&|\|\||--|->|=|==|!=|:=|:|::|\.\.\<|\.\.=|[<>+\-*/%&])" >
120 <token type = "Operator"/>
121 </rule>
122 <rule pattern="[{}()\[\],.;]">
123 <token type="Punctuation"/>
124 </rule>
125 </state>
126 </rules>
127</lexer>