1<lexer>
2 <config>
3 <name>Lateralus</name>
4 <alias>lateralus</alias>
5 <alias>ltl</alias>
6 <filename>*.ltl</filename>
7 <mime_type>text/x-lateralus</mime_type>
8 <ensure_nl>true</ensure_nl>
9 </config>
10 <rules>
11 <state name="root">
12 <!-- Whitespace -->
13 <rule pattern="\s+">
14 <token type="TextWhitespace"/>
15 </rule>
16 <!-- Comments -->
17 <rule pattern="///[^\n]*">
18 <token type="CommentSpecial"/>
19 </rule>
20 <rule pattern="//[^\n]*">
21 <token type="CommentSingle"/>
22 </rule>
23 <rule pattern="/\*">
24 <token type="CommentMultiline"/>
25 <push state="block_comment"/>
26 </rule>
27 <!-- Attribute decorators: @memo, @doc("...") -->
28 <rule pattern="@[A-Za-z_][A-Za-z0-9_]*">
29 <token type="NameDecorator"/>
30 </rule>
31 <!-- Capability annotations: #[caps(io, net)] -->
32 <rule pattern="#\[">
33 <token type="NameDecorator"/>
34 <push state="attribute"/>
35 </rule>
36 <!-- Control flow / declaration keywords -->
37 <rule pattern="(fn|let|mut|match|if|else|elif|while|for|in|return|break|continue|import|export|module|pub|priv|struct|enum|impl|trait|where|type|const|static|async|await|spawn|guard|defer|use|as|self|Self|super|yield|do)\b">
38 <token type="Keyword"/>
39 </rule>
40 <!-- Builtin types -->
41 <rule pattern="(int|i8|i16|i32|i64|i128|uint|u8|u16|u32|u64|u128|float|f32|f64|bool|str|char|bytes|any|never|list|map|set|tuple|Option|Result|Some|None|Ok|Err)\b">
42 <token type="KeywordType"/>
43 </rule>
44 <!-- Boolean / null literals -->
45 <rule pattern="(true|false|null)\b">
46 <token type="KeywordConstant"/>
47 </rule>
48 <!-- Builtin functions -->
49 <rule pattern="(print|println|eprint|eprintln|format|panic|assert|assert_eq|todo|unimplemented|unreachable|len|range|map|filter|reduce|fold|zip|enumerate|sort|sorted|reverse|sum|min|max)\b">
50 <token type="NameBuiltin"/>
51 </rule>
52 <!-- Function definition -->
53 <rule pattern="(fn)(\s+)([A-Za-z_][A-Za-z0-9_]*)">
54 <bygroups>
55 <token type="Keyword"/>
56 <token type="TextWhitespace"/>
57 <token type="NameFunction"/>
58 </bygroups>
59 </rule>
60 <!-- Type / struct / enum / trait / impl definition -->
61 <rule pattern="(struct|enum|trait|type|impl)(\s+)([A-Z][A-Za-z0-9_]*)">
62 <bygroups>
63 <token type="Keyword"/>
64 <token type="TextWhitespace"/>
65 <token type="NameClass"/>
66 </bygroups>
67 </rule>
68 <!-- Module path: foo::bar -->
69 <rule pattern="([A-Za-z_][A-Za-z0-9_]*)(::)">
70 <bygroups>
71 <token type="NameNamespace"/>
72 <token type="Punctuation"/>
73 </bygroups>
74 </rule>
75 <!-- ADT variant: UppercaseIdentifier -->
76 <rule pattern="[A-Z][A-Za-z0-9_]*">
77 <token type="NameClass"/>
78 </rule>
79 <!-- Raw strings: r"...", r#"..."# -->
80 <rule pattern="r#".*?"#">
81 <token type="LiteralString"/>
82 </rule>
83 <rule pattern="r"[^"\\]*(?:\\.[^"\\]*)*"">
84 <token type="LiteralString"/>
85 </rule>
86 <!-- Byte strings -->
87 <rule pattern="b"">
88 <token type="LiteralString"/>
89 <push state="string"/>
90 </rule>
91 <!-- Regular / interpolated strings -->
92 <rule pattern=""">
93 <token type="LiteralString"/>
94 <push state="string"/>
95 </rule>
96 <!-- Char literals -->
97 <rule pattern="'(?:\\.|[^'\\])'">
98 <token type="LiteralStringChar"/>
99 </rule>
100 <!-- Numeric literals -->
101 <rule pattern="[0-9][0-9_]*\.[0-9][0-9_]*(?:[eE][-+]?[0-9][0-9_]*)?(?:_?f(32|64))?">
102 <token type="LiteralNumberFloat"/>
103 </rule>
104 <rule pattern="0x[0-9a-fA-F][0-9a-fA-F_]*(?:_?[iu](8|16|32|64|128))?">
105 <token type="LiteralNumberHex"/>
106 </rule>
107 <rule pattern="0o[0-7][0-7_]*(?:_?[iu](8|16|32|64|128))?">
108 <token type="LiteralNumberOct"/>
109 </rule>
110 <rule pattern="0b[01][01_]*(?:_?[iu](8|16|32|64|128))?">
111 <token type="LiteralNumberBin"/>
112 </rule>
113 <rule pattern="[0-9][0-9_]*(?:_?[iu](8|16|32|64|128))?">
114 <token type="LiteralNumberInteger"/>
115 </rule>
116 <!-- Pipeline operator (signature feature) -->
117 <rule pattern="\|>">
118 <token type="Operator"/>
119 </rule>
120 <!-- Other operators -->
121 <rule pattern="(==|!=|<=|>=|->|=>|&&|\|\||<<|>>|::|\.\.=?|\?\?|[+\-*/%<>!=&|\^~?])">
122 <token type="Operator"/>
123 </rule>
124 <!-- Punctuation -->
125 <rule pattern="[{}()\[\];,.:]">
126 <token type="Punctuation"/>
127 </rule>
128 <!-- Identifiers -->
129 <rule pattern="[A-Za-z_][A-Za-z0-9_]*">
130 <token type="Name"/>
131 </rule>
132 </state>
133 <state name="block_comment">
134 <rule pattern="[^/*]+">
135 <token type="CommentMultiline"/>
136 </rule>
137 <rule pattern="/\*">
138 <token type="CommentMultiline"/>
139 <push/>
140 </rule>
141 <rule pattern="\*/">
142 <token type="CommentMultiline"/>
143 <pop depth="1"/>
144 </rule>
145 <rule pattern="[/*]">
146 <token type="CommentMultiline"/>
147 </rule>
148 </state>
149 <state name="string">
150 <rule pattern="\\[nrt'"\\0]">
151 <token type="LiteralStringEscape"/>
152 </rule>
153 <rule pattern="\\x[0-9a-fA-F]{2}">
154 <token type="LiteralStringEscape"/>
155 </rule>
156 <rule pattern="\\u\{[0-9a-fA-F]+\}">
157 <token type="LiteralStringEscape"/>
158 </rule>
159 <rule pattern="\{[^}]*\}">
160 <token type="LiteralStringInterpol"/>
161 </rule>
162 <rule pattern="[^"\\{}]+">
163 <token type="LiteralString"/>
164 </rule>
165 <rule pattern=""">
166 <token type="LiteralString"/>
167 <pop depth="1"/>
168 </rule>
169 </state>
170 <state name="attribute">
171 <rule pattern="[^\[\]]+">
172 <token type="NameDecorator"/>
173 </rule>
174 <rule pattern="\[">
175 <token type="NameDecorator"/>
176 <push/>
177 </rule>
178 <rule pattern="\]">
179 <token type="NameDecorator"/>
180 <pop depth="1"/>
181 </rule>
182 </state>
183 </rules>
184</lexer>