1<lexer>
2 <config>
3 <name>Devicetree</name>
4 <alias>devicetree</alias>
5 <alias>dts</alias>
6 <filename>*.dts</filename>
7 <filename>*.dtsi</filename>
8 <mime_type>text/x-devicetree</mime_type>
9 </config>
10 <rules>
11 <state name="whitespace">
12 <rule pattern="\n">
13 <token type="TextWhitespace" />
14 </rule>
15 <rule pattern="\s+">
16 <token type="TextWhitespace" />
17 </rule>
18 <rule pattern="\\\n">
19 <token type="Text" />
20 </rule>
21 <rule pattern="//(\n|[\w\W]*?[^\\]\n)">
22 <token type="CommentSingle" />
23 </rule>
24 <rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
25 <token type="CommentMultiline" />
26 </rule>
27 </state>
28
29 <state name="macro">
30 <rule pattern="(#include)(\s*(?:/[*][^*/]*?[*]/\s*)*)([^\n]+)">
31 <bygroups>
32 <token type="CommentPreproc" />
33 <token type="CommentMultiline" />
34 <token type="CommentPreprocFile" />
35 </bygroups>
36 </rule>
37 <rule pattern="(#define)(\s*(?:/[*][^*/]*?[*]/\s*)*)([^\n]+)">
38 <bygroups>
39 <token type="CommentPreproc" />
40 <token type="CommentMultiline" />
41 <token type="CommentPreproc" />
42 </bygroups>
43 </rule>
44 <rule pattern="/dts-v1/">
45 <token type="CommentPreproc" />
46 </rule>
47 <rule pattern="/memreserve/">
48 <token type="CommentPreproc" />
49 </rule>
50 <rule pattern="/delete-node/">
51 <token type="CommentPreproc" />
52 </rule>
53 <rule pattern="/delete-property/">
54 <token type="CommentPreproc" />
55 </rule>
56 <rule pattern="(/include/)(\s*(?:/[*][^*/]*?[*]/\s*)*)("[^\n]+")">
57 <bygroups>
58 <token type="CommentPreproc" />
59 <token type="CommentMultiline" />
60 <token type="CommentPreprocFile" />
61 </bygroups>
62 </rule>
63 </state>
64
65 <state name="basic_statements">
66 <rule pattern="&[a-zA-Z0-9_]+">
67 <token type="NameLabel" />
68 </rule>
69
70 <rule pattern="[a-zA-Z0-9_]+:">
71 <token type="NameLabel" />
72 </rule>
73
74 <rule pattern="(L?)(")">
75 <bygroups>
76 <token type="LiteralStringAffix" />
77 <token type="LiteralString" />
78 </bygroups>
79 <push state="string" />
80 </rule>
81 <rule pattern="0x[0-9a-fA-F]+">
82 <token type="LiteralNumberHex" />
83 </rule>
84 <rule pattern="\d+">
85 <token type="LiteralNumberInteger" />
86 </rule>
87
88 <rule pattern="status\b">
89 <token type="KeywordReserved" />
90 <push state="status_property" />
91 </rule>
92
93 <rule pattern="([~!%^&*+=|?:<>/#-])">
94 <token type="Operator" />
95 </rule>
96 <rule pattern="[()\[\]{},.]">
97 <token type="Punctuation" />
98 </rule>
99
100 <rule
101 pattern="[a-zA-Z_][\w-]*(?=(?:\s*,\s*[a-zA-Z_][\w-]*|(?:\s*(?:/[*][^*/]*?[*]/\s*)*))*\s*[=;])">
102 <token type="NameAttribute" />
103 </rule>
104 <rule pattern="[a-zA-Z_][\w-]*">
105 <token type="Name" />
106 </rule>
107 </state>
108
109 <state name="status_property">
110 <rule>
111 <include state="whitespace" />
112 </rule>
113 <rule pattern="=">
114 <token type="Operator" />
115 </rule>
116
117 <rule pattern=""okay"">
118 <token type="LiteralString" />
119 <pop depth="1" />
120 </rule>
121 <rule pattern=""disabled"">
122 <token type="KeywordType" />
123 <pop depth="1" />
124 </rule>
125 <rule pattern=""reserved"">
126 <token type="NameDecorator" />
127 <pop depth="1" />
128 </rule>
129 <rule pattern=""fail"">
130 <token type="GenericError" />
131 <pop depth="1" />
132 </rule>
133 <rule pattern=""fail-[^\"]+"">
134 <token type="GenericTraceback" />
135 <pop depth="1" />
136 </rule>
137 <rule pattern=""">
138 <token type="LiteralString" />
139 <push state="string" />
140 </rule>
141
142 <rule pattern=";">
143 <pop depth="1" />
144 </rule>
145 </state>
146
147 <state name="root">
148 <rule>
149 <include state="whitespace" />
150 </rule>
151 <rule>
152 <include state="macro" />
153 </rule>
154
155 <rule pattern="([^/*@\s&]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(\s*(?:/[*][^*/]*?[*]/\s*)*)(\{)">
156 <bygroups>
157 <token type="NameFunction" />
158 <token type="Operator" />
159 <token type="LiteralNumberInteger" />
160 <token type="CommentMultiline" />
161 <token type="Punctuation" />
162 </bygroups>
163 <push state="node" />
164 </rule>
165
166 <rule>
167 <push state="statement" />
168 </rule>
169 </state>
170
171 <state name="node">
172 <rule>
173 <include state="whitespace" />
174 </rule>
175 <rule>
176 <include state="macro" />
177 </rule>
178
179 <rule pattern="([^/*@\s&]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(\s*(?:/[*][^*/]*?[*]/\s*)*)(\{)">
180 <bygroups>
181 <token type="NameFunction" />
182 <token type="Operator" />
183 <token type="LiteralNumberInteger" />
184 <token type="CommentMultiline" />
185 <token type="Punctuation" />
186 </bygroups>
187 <push />
188 </rule>
189
190 <rule pattern="([a-zA-Z0-9_]+)(\s*)(:)">
191 <bygroups>
192 <token type="NameLabel" />
193 <token type="Text" />
194 <token type="Punctuation" />
195 </bygroups>
196 </rule>
197
198 <rule pattern="\}">
199 <token type="Punctuation" />
200 <pop depth="1" />
201 </rule>
202 <rule>
203 <include state="basic_statements" />
204 </rule>
205 <rule pattern=";">
206 <token type="Punctuation" />
207 </rule>
208 </state>
209
210 <state name="statement">
211 <rule>
212 <include state="whitespace" />
213 </rule>
214 <rule pattern="([a-zA-Z0-9_]+)(\s*)(:)">
215 <bygroups>
216 <token type="NameLabel" />
217 <token type="Text" />
218 <token type="Punctuation" />
219 </bygroups>
220 <pop depth="1" />
221 </rule>
222 <rule>
223 <include state="basic_statements" />
224 </rule>
225 <rule pattern=";">
226 <token type="Punctuation" />
227 <pop depth="1" />
228 </rule>
229 </state>
230
231 <state name="string">
232 <rule pattern=""">
233 <token type="LiteralString" />
234 <pop depth="1" />
235 </rule>
236 <rule
237 pattern="\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})">
238 <token type="LiteralStringEscape" />
239 </rule>
240 <rule pattern="[^\\"\n]+">
241 <token type="LiteralString" />
242 </rule>
243 <rule pattern="\\\n">
244 <token type="LiteralString" />
245 </rule>
246 <rule pattern="\\">
247 <token type="LiteralString" />
248 </rule>
249 </state>
250 </rules>
251</lexer>