...
1<lexer>
2 <config>
3 <name>C</name>
4 <alias>c</alias>
5 <filename>*.c</filename>
6 <filename>*.h</filename>
7 <filename>*.idc</filename>
8 <filename>*.x[bp]m</filename>
9 <mime_type>text/x-chdr</mime_type>
10 <mime_type>text/x-csrc</mime_type>
11 <mime_type>image/x-xbitmap</mime_type>
12 <mime_type>image/x-xpixmap</mime_type>
13 <ensure_nl>true</ensure_nl>
14 </config>
15 <rules>
16 <state name="statement">
17 <rule>
18 <include state="whitespace"/>
19 </rule>
20 <rule>
21 <include state="statements"/>
22 </rule>
23 <rule pattern="[{}]">
24 <token type="Punctuation"/>
25 </rule>
26 <rule pattern=";">
27 <token type="Punctuation"/>
28 <pop depth="1"/>
29 </rule>
30 </state>
31 <state name="function">
32 <rule>
33 <include state="whitespace"/>
34 </rule>
35 <rule>
36 <include state="statements"/>
37 </rule>
38 <rule pattern=";">
39 <token type="Punctuation"/>
40 </rule>
41 <rule pattern="\{">
42 <token type="Punctuation"/>
43 <push/>
44 </rule>
45 <rule pattern="\}">
46 <token type="Punctuation"/>
47 <pop depth="1"/>
48 </rule>
49 </state>
50 <state name="string">
51 <rule pattern=""">
52 <token type="LiteralString"/>
53 <pop depth="1"/>
54 </rule>
55 <rule 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})">
56 <token type="LiteralStringEscape"/>
57 </rule>
58 <rule pattern="[^\\"\n]+">
59 <token type="LiteralString"/>
60 </rule>
61 <rule pattern="\\\n">
62 <token type="LiteralString"/>
63 </rule>
64 <rule pattern="\\">
65 <token type="LiteralString"/>
66 </rule>
67 </state>
68 <state name="macro">
69 <rule pattern="(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)">
70 <bygroups>
71 <token type="CommentPreproc"/>
72 <token type="Text"/>
73 <token type="CommentPreprocFile"/>
74 </bygroups>
75 </rule>
76 <rule pattern="[^/\n]+">
77 <token type="CommentPreproc"/>
78 </rule>
79 <rule pattern="/[*](.|\n)*?[*]/">
80 <token type="CommentMultiline"/>
81 </rule>
82 <rule pattern="//.*?\n">
83 <token type="CommentSingle"/>
84 <pop depth="1"/>
85 </rule>
86 <rule pattern="/">
87 <token type="CommentPreproc"/>
88 </rule>
89 <rule pattern="(?<=\\)\n">
90 <token type="CommentPreproc"/>
91 </rule>
92 <rule pattern="\n">
93 <token type="CommentPreproc"/>
94 <pop depth="1"/>
95 </rule>
96 </state>
97 <state name="if0">
98 <rule pattern="^\s*#if.*?(?<!\\)\n">
99 <token type="CommentPreproc"/>
100 <push/>
101 </rule>
102 <rule pattern="^\s*#el(?:se|if).*\n">
103 <token type="CommentPreproc"/>
104 <pop depth="1"/>
105 </rule>
106 <rule pattern="^\s*#endif.*?(?<!\\)\n">
107 <token type="CommentPreproc"/>
108 <pop depth="1"/>
109 </rule>
110 <rule pattern=".*?\n">
111 <token type="Comment"/>
112 </rule>
113 </state>
114 <state name="whitespace">
115 <rule pattern="^#if\s+0">
116 <token type="CommentPreproc"/>
117 <push state="if0"/>
118 </rule>
119 <rule pattern="^#">
120 <token type="CommentPreproc"/>
121 <push state="macro"/>
122 </rule>
123 <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)">
124 <bygroups>
125 <usingself state="root"/>
126 <token type="CommentPreproc"/>
127 </bygroups>
128 <push state="if0"/>
129 </rule>
130 <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#)">
131 <bygroups>
132 <usingself state="root"/>
133 <token type="CommentPreproc"/>
134 </bygroups>
135 <push state="macro"/>
136 </rule>
137 <rule pattern="\n">
138 <token type="Text"/>
139 </rule>
140 <rule pattern="\s+">
141 <token type="Text"/>
142 </rule>
143 <rule pattern="\\\n">
144 <token type="Text"/>
145 </rule>
146 <rule pattern="//(\n|[\w\W]*?[^\\]\n)">
147 <token type="CommentSingle"/>
148 </rule>
149 <rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
150 <token type="CommentMultiline"/>
151 </rule>
152 <rule pattern="/(\\\n)?[*][\w\W]*">
153 <token type="CommentMultiline"/>
154 </rule>
155 </state>
156 <state name="statements">
157 <rule pattern="(L?)(")">
158 <bygroups>
159 <token type="LiteralStringAffix"/>
160 <token type="LiteralString"/>
161 </bygroups>
162 <push state="string"/>
163 </rule>
164 <rule pattern="(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')">
165 <bygroups>
166 <token type="LiteralStringAffix"/>
167 <token type="LiteralStringChar"/>
168 <token type="LiteralStringChar"/>
169 <token type="LiteralStringChar"/>
170 </bygroups>
171 </rule>
172 <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*">
173 <token type="LiteralNumberFloat"/>
174 </rule>
175 <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
176 <token type="LiteralNumberFloat"/>
177 </rule>
178 <rule pattern="0x[0-9a-fA-F]+[LlUu]*">
179 <token type="LiteralNumberHex"/>
180 </rule>
181 <rule pattern="0[0-7]+[LlUu]*">
182 <token type="LiteralNumberOct"/>
183 </rule>
184 <rule pattern="\d+[LlUu]*">
185 <token type="LiteralNumberInteger"/>
186 </rule>
187 <rule pattern="\*/">
188 <token type="Error"/>
189 </rule>
190 <rule pattern="[~!%^&*+=|?:<>/-]">
191 <token type="Operator"/>
192 </rule>
193 <rule pattern="[()\[\],.]">
194 <token type="Punctuation"/>
195 </rule>
196 <rule pattern="(restricted|volatile|continue|register|default|typedef|struct|extern|switch|sizeof|static|return|union|while|const|break|goto|enum|else|case|auto|for|asm|if|do)\b">
197 <token type="Keyword"/>
198 </rule>
199 <rule pattern="(bool|int|long|float|short|double|char((8|16|32)_t)?|unsigned|signed|void|u?int(_fast|_least|)(8|16|32|64)_t)\b|\b[a-z]\w*_t\b">
200 <token type="KeywordType"/>
201 </rule>
202 <rule pattern="(typename|__inline|restrict|_inline|thread|inline|naked)\b">
203 <token type="KeywordReserved"/>
204 </rule>
205 <rule pattern="(__m(128i|128d|128|64))\b">
206 <token type="KeywordReserved"/>
207 </rule>
208 <rule pattern="__(forceinline|identifier|unaligned|declspec|fastcall|finally|stdcall|wchar_t|assume|except|int32|cdecl|int16|leave|based|raise|int64|noop|int8|w64|try|asm)\b">
209 <token type="KeywordReserved"/>
210 </rule>
211 <rule pattern="(true|false|NULL)\b">
212 <token type="NameBuiltin"/>
213 </rule>
214 <rule pattern="([a-zA-Z_]\w*)(\s*)(:)(?!:)">
215 <bygroups>
216 <token type="NameLabel"/>
217 <token type="Text"/>
218 <token type="Punctuation"/>
219 </bygroups>
220 </rule>
221 <rule pattern="\b[A-Za-z_]\w*(?=\s*\()">
222 <token type="NameFunction"/>
223 </rule>
224 <rule pattern="[a-zA-Z_]\w*">
225 <token type="Name"/>
226 </rule>
227 </state>
228 <state name="root">
229 <rule>
230 <include state="whitespace"/>
231 </rule>
232 <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)">
233 <bygroups>
234 <usingself state="root"/>
235 <token type="NameFunction"/>
236 <usingself state="root"/>
237 <usingself state="root"/>
238 <token type="Punctuation"/>
239 </bygroups>
240 <push state="function"/>
241 </rule>
242 <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)">
243 <bygroups>
244 <usingself state="root"/>
245 <token type="NameFunction"/>
246 <usingself state="root"/>
247 <usingself state="root"/>
248 <token type="Punctuation"/>
249 </bygroups>
250 </rule>
251 <rule>
252 <push state="statement"/>
253 </rule>
254 </state>
255 </rules>
256</lexer>
View as plain text