1+ <lexer >
2+ <config >
3+ <name >RGBDS Assembly</name >
4+ <alias >rgbasm</alias >
5+ <filename >*.asm</filename >
6+ <priority >0.5</priority >
7+ <case_insensitive >true</case_insensitive >
8+ </config >
9+ <rules >
10+ <!-- Symbol state for parsing anything between curly brackets -->
11+ <state name =" symbol" >
12+ <rule pattern =" [^{}]+" >
13+ <token type =" NameVariable" />
14+ </rule >
15+ <rule pattern =" {" >
16+ <token type =" Punctuation" />
17+ <push state =" symbol" />
18+ </rule >
19+ <rule pattern =" }" >
20+ <token type =" Punctuation" />
21+ <pop depth =" 1" />
22+ </rule >
23+ </state >
24+ <!-- String states for parsing quote-delimited text that may contain symbols -->
25+ <state name =" string" >
26+ <rule pattern =" [^{" \n\\]+" >
27+ <token type =" LiteralString" />
28+ </rule >
29+ <rule pattern =" \\." >
30+ <token type =" LiteralStringEscape" />
31+ </rule >
32+ <rule pattern =" {" >
33+ <token type =" Punctuation" />
34+ <push state =" symbol" />
35+ </rule >
36+ <rule pattern =" (" |\n)" >
37+ <token type =" LiteralString" />
38+ <pop depth =" 1" />
39+ </rule >
40+ </state >
41+ <state name =" stringmultiline" >
42+ <rule pattern =" " {3}" >
43+ <token type =" LiteralString" />
44+ <pop depth =" 1" />
45+ </rule >
46+ <rule pattern =" [^{\\]+?" >
47+ <token type =" LiteralString" />
48+ </rule >
49+ <rule pattern =" \\." >
50+ <token type =" LiteralStringEscape" />
51+ </rule >
52+ <rule pattern =" {" >
53+ <token type =" Punctuation" />
54+ <push state =" symbol" />
55+ </rule >
56+ </state >
57+ <!-- Root state -->
58+ <state name =" root" >
59+ <!-- Comments -->
60+ <rule pattern =" ;.*?$" >
61+ <token type =" CommentSingle" />
62+ </rule >
63+ <rule pattern =" /[*](.|\n)*?[*]/" >
64+ <token type =" CommentMultiline" />
65+ </rule >
66+ <!-- Local label -->
67+ <rule pattern =" ^(\.)(\w+)(:?)" >
68+ <bygroups >
69+ <token type =" Punctuation" />
70+ <token type =" NameLabel" />
71+ <token type =" Punctuation" />
72+ </bygroups >
73+ </rule >
74+ <!-- Global label (with optional local) -->
75+ <rule pattern =" (^\w+)(?:(\.)(\w+))?(::?)" >
76+ <bygroups >
77+ <token type =" NameLabel" />
78+ <token type =" Punctuation" />
79+ <token type =" NameLabel" />
80+ <token type =" Punctuation" />
81+ </bygroups >
82+ </rule >
83+ <!-- Symbols delimited by curly brackets -->
84+ <rule pattern =" {" >
85+ <token type =" Punctuation" />
86+ <push state =" symbol" />
87+ </rule >
88+ <!-- Numeric types (can contain '_' except at the beginning) -->
89+ <rule pattern =" (0x|\$)[0-9a-fA-F][0-9a-fA-F_]*" >
90+ <token type =" LiteralNumberHex" />
91+ </rule >
92+ <rule pattern =" [0-9a-fA-F][0-9a-fA-F_]*h\b" >
93+ <token type =" LiteralNumberHex" />
94+ </rule >
95+ <rule pattern =" (0o|& )[0-7][0-7_]*" >
96+ <token type =" LiteralNumberOct" />
97+ </rule >
98+ <rule pattern =" (0b|%)[01][01_]*" >
99+ <token type =" LiteralNumberBin" />
100+ </rule >
101+ <rule pattern =" -?[0-9][0-9_]*\.[0-9_]+(q[0-9]+)?" >
102+ <token type =" LiteralNumberFloat" />
103+ </rule >
104+ <rule pattern =" -?[0-9][0-9_]*" >
105+ <token type =" LiteralNumberInteger" />
106+ </rule >
107+ <!-- "Game Boy graphics" format, which can be made of user-defined symbols -->
108+ <rule pattern =" `[^\s]+" >
109+ <token type =" LiteralNumberInteger" />
110+ </rule >
111+ <!-- #-prefixed raw string (multiline) -->
112+ <rule pattern =" (#)(" {3}(?:.|\n)*?" {3})" >
113+ <bygroups >
114+ <token type =" LiteralStringAffix" />
115+ <token type =" LiteralString" />
116+ </bygroups >
117+ </rule >
118+ <!-- #-prefixed raw string -->
119+ <rule pattern =" (#)(" .*?" )" >
120+ <bygroups >
121+ <token type =" LiteralStringAffix" />
122+ <token type =" LiteralString" />
123+ </bygroups >
124+ </rule >
125+ <!-- Start of quote-delimited (non-raw) strings -->
126+ <rule pattern =" " {3}" >
127+ <token type =" LiteralString" />
128+ <push state =" stringmultiline" />
129+ </rule >
130+ <rule pattern =" " " >
131+ <token type =" LiteralString" />
132+ <push state =" string" />
133+ </rule >
134+ <!-- Macro arguments (single character) -->
135+ <rule pattern =" \\[1-9@#]" >
136+ <token type =" NameVariableMagic" />
137+ </rule >
138+ <!-- Macro arguments (bracketed) -->
139+ <rule pattern =" (\\< )([^> ]+)(> )" >
140+ <bygroups >
141+ <token type =" NameVariableMagic" />
142+ <usingself state =" root" />
143+ <token type =" NameVariableMagic" />
144+ </bygroups >
145+ </rule >
146+ <!-- LDI/LDD alternate formats -->
147+ <rule pattern =" (\[)(hl\+|hl-|hli|hld)(\])" >
148+ <bygroups >
149+ <token type =" Punctuation" />
150+ <token type =" Keyword" />
151+ <token type =" Punctuation" />
152+ </bygroups >
153+ </rule >
154+ <!-- Punctuation (excluding period which is used in predeclared symbols) -->
155+ <rule pattern =" [\[\],()\\:]" >
156+ <token type =" Punctuation" />
157+ </rule >
158+ <!-- Variable definitions that can contain RL, which is also an opcode -->
159+ <rule pattern =" ((?:re)?def)([\t ]+)([\w{}:]+)([\t ]+)(rb|rw|rl|equs|equ)?" >
160+ <bygroups >
161+ <token type =" NameBuiltin" />
162+ <token type =" TextWhitespace" />
163+ <usingself state =" root" />
164+ <token type =" TextWhitespace" />
165+ <token type =" NameBuiltin" />
166+ </bygroups >
167+ </rule >
168+ <!-- Specific rule for some names that are both built-ins and functions -->
169+ <rule pattern =" \b(bank|section)(\()\b" >
170+ <bygroups >
171+ <token type =" NameFunction" />
172+ <token type =" Punctuation" />
173+ </bygroups >
174+ </rule >
175+ <!-- Specific rule for options redefinitions -->
176+ <rule pattern =" \b(opt|pusho)([\t ]+)([^,\s]+)(?:(,)([\t ]*)([^,\s]+))*" >
177+ <bygroups >
178+ <token type =" NameBuiltin" />
179+ <token type =" TextWhitespace" />
180+ <token type =" Literal" />
181+ <token type =" Punctuation" />
182+ <token type =" TextWhitespace" />
183+ <token type =" Literal" />
184+ </bygroups >
185+ </rule >
186+ <!-- Predeclared symbols -->
187+ <rule pattern =" \b(_rs|_narg|__date__|__time__|__iso_8601_local__|__iso_8601_utc__|__utc_year__|__utc_month__|__utc_day__|__utc_hour__|__utc_minute__|__utc_second__|__rgbds_major__|__rgbds_minor__|__rgbds_patch__|__rgbds_rc__|__rgbds_version__)\b" >
188+ <token type =" NameVariableMagic" />
189+ </rule >
190+ <!-- Built-in statements -->
191+ <rule pattern =" \b(align|assert|bank|break|charmap|db|dl|ds|dw|elif|else|endc|endl|endm|endr|endsection|endu|export|fail|fatal|for|fragment|hram|if|incbin|include|load|macro|newcharmap|nextu|oam|popc|popo|pops|println|print|purge|pushc|pusho|pushs|redef|rept|rom0|romx|rsreset|rsset|section|setcharmap|shift|sram|static_assert|union|vram|warn|wram0|wramx)" >
192+ <token type =" NameBuiltin" />
193+ </rule >
194+ <!-- Integer functions -->
195+ <rule pattern =" \b(high|low|bitwidth|tzcount)\b" >
196+ <token type =" NameFunction" />
197+ </rule >
198+ <!-- Fixed-point functions -->
199+ <rule pattern =" \b(div|mul|fmod|pow|log|round|ceil|floor|sin|cos|tan|asin|acos|atan|atan2)\b" >
200+ <token type =" NameFunction" />
201+ </rule >
202+ <!-- String functions -->
203+ <rule pattern =" \b(strcat|strupr|strlwr|strslice|strrpl|strfmt|strchar|revchar|strlen|strcmp|strfind|strrfind|incharmap|charlen|charcmp|charsize|strsub|strin|strrin|charsub)\b" >
204+ <token type =" NameFunction" />
205+ </rule >
206+ <!-- Other functions, excluding some that are the same as built-ins (BANK and SECTION) -->
207+ <rule pattern =" \b(def|isconst|sizeof|startof)" >
208+ <token type =" NameFunction" />
209+ </rule >
210+ <!-- Opcodes -->
211+ <rule pattern =" \b(adc|add|and|bit|call|ccf|cp|cpl|daa|dec|di|ei|halt|inc|jp|jr|ld|ldd|ldh|ldi|nop|or|pop|push|res|ret|reti|rlca|rla|rlc|rl|rr|rra|rrc|rrca|rst|sbc|scf|set|sla|sra|srl|stop|sub|swap|xor)\b" >
212+ <token type =" Keyword" />
213+ </rule >
214+ <!-- Registers and flags -->
215+ <rule pattern =" \b(a|f|b|c|d|e|h|l|af|bc|de|hl|sp|pc|z|nz|nc)\b" >
216+ <token type =" Keyword" />
217+ </rule >
218+ <!-- Operators -->
219+ <rule pattern =" [-%!+/*~\^& |=<> ]" >
220+ <token type =" Operator" />
221+ </rule >
222+ <!-- Reference to label -->
223+ <rule pattern =" (\.)?(\w+)" >
224+ <bygroups >
225+ <token type =" Punctuation" />
226+ <token type =" Name" />
227+ </bygroups >
228+ </rule >
229+ <!-- Predeclared symbols (non-words) -->
230+ <rule pattern =" (@|\.|\.\.)" >
231+ <token type =" NameVariableMagic" />
232+ </rule >
233+ <!-- Default text -->
234+ <rule pattern =" \s+" >
235+ <token type =" TextWhitespace" />
236+ </rule >
237+ </state >
238+ </rules >
239+ </lexer >
0 commit comments