...
1<lexer>
2 <config>
3 <name>Perl</name>
4 <alias>perl</alias>
5 <alias>pl</alias>
6 <filename>*.pl</filename>
7 <filename>*.pm</filename>
8 <filename>*.t</filename>
9 <mime_type>text/x-perl</mime_type>
10 <mime_type>application/x-perl</mime_type>
11 <dot_all>true</dot_all>
12 </config>
13 <rules>
14 <state name="root">
15 <rule pattern="\A\#!.+?$">
16 <token type="CommentHashbang"/>
17 </rule>
18 <rule pattern="\#.*?$">
19 <token type="CommentSingle"/>
20 </rule>
21 <rule pattern="^=[a-zA-Z0-9]+\s+.*?\n=cut">
22 <token type="CommentMultiline"/>
23 </rule>
24 <rule pattern="(continue|foreach|unless|return|elsif|CHECK|while|BEGIN|reset|print|until|next|else|INIT|then|last|redo|case|our|new|for|END|if|do|my)\b">
25 <token type="Keyword"/>
26 </rule>
27 <rule pattern="(format)(\s+)(\w+)(\s*)(=)(\s*\n)">
28 <bygroups>
29 <token type="Keyword"/>
30 <token type="Text"/>
31 <token type="Name"/>
32 <token type="Text"/>
33 <token type="Punctuation"/>
34 <token type="Text"/>
35 </bygroups>
36 <push state="format"/>
37 </rule>
38 <rule pattern="(eq|lt|gt|le|ge|ne|not|and|or|cmp)\b">
39 <token type="OperatorWord"/>
40 </rule>
41 <rule pattern="s/(\\\\|\\[^\\]|[^\\/])*/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*">
42 <token type="LiteralStringRegex"/>
43 </rule>
44 <rule pattern="s!(\\\\|\\!|[^!])*!(\\\\|\\!|[^!])*![egimosx]*">
45 <token type="LiteralStringRegex"/>
46 </rule>
47 <rule pattern="s\\(\\\\|[^\\])*\\(\\\\|[^\\])*\\[egimosx]*">
48 <token type="LiteralStringRegex"/>
49 </rule>
50 <rule pattern="s@(\\\\|\\[^\\]|[^\\@])*@(\\\\|\\[^\\]|[^\\@])*@[egimosx]*">
51 <token type="LiteralStringRegex"/>
52 </rule>
53 <rule pattern="s%(\\\\|\\[^\\]|[^\\%])*%(\\\\|\\[^\\]|[^\\%])*%[egimosx]*">
54 <token type="LiteralStringRegex"/>
55 </rule>
56 <rule pattern="s\{(\\\\|\\[^\\]|[^\\}])*\}\s*">
57 <token type="LiteralStringRegex"/>
58 <push state="balanced-regex"/>
59 </rule>
60 <rule pattern="s<(\\\\|\\[^\\]|[^\\>])*>\s*">
61 <token type="LiteralStringRegex"/>
62 <push state="balanced-regex"/>
63 </rule>
64 <rule pattern="s\[(\\\\|\\[^\\]|[^\\\]])*\]\s*">
65 <token type="LiteralStringRegex"/>
66 <push state="balanced-regex"/>
67 </rule>
68 <rule pattern="s\((\\\\|\\[^\\]|[^\\)])*\)\s*">
69 <token type="LiteralStringRegex"/>
70 <push state="balanced-regex"/>
71 </rule>
72 <rule pattern="m?/(\\\\|\\[^\\]|[^\\/\n])*/[gcimosx]*">
73 <token type="LiteralStringRegex"/>
74 </rule>
75 <rule pattern="m(?=[/!\\{<\[(@%$])">
76 <token type="LiteralStringRegex"/>
77 <push state="balanced-regex"/>
78 </rule>
79 <rule pattern="((?<==~)|(?<=\())\s*/(\\\\|\\[^\\]|[^\\/])*/[gcimosx]*">
80 <token type="LiteralStringRegex"/>
81 </rule>
82 <rule pattern="\s+">
83 <token type="Text"/>
84 </rule>
85 <rule pattern="(getprotobynumber|getprotobyname|getservbyport|getservbyname|gethostbyname|gethostbyaddr|getnetbyaddr|getnetbyname|setprotoent|setpriority|getsockname|getprotoent|getpriority|getpeername|endprotoent|setsockopt|endhostent|setservent|socketpair|getsockopt|endservent|sethostent|getservent|gethostent|getnetent|wantarray|localtime|quotemeta|setnetent|prototype|endnetent|rewinddir|endpwent|endgrent|getpwent|getpwnam|getgrgid|dbmclose|continue|closedir|shutdown|setpwent|shmwrite|syswrite|truncate|formline|setgrent|getgrent|readpipe|getgrnam|readlink|readline|getpwuid|getlogin|telldir|opendir|shmread|readdir|getpgrp|getppid|waitpid|binmode|reverse|sprintf|unshift|symlink|seekdir|sysopen|defined|dbmopen|sysread|sysseek|connect|lcfirst|ucfirst|setpgrp|syscall|import|chroot|system|gmtime|unlink|unpack|semget|semctl|select|msgrcv|length|printf|listen|scalar|caller|rindex|substr|splice|rename|msgctl|msgget|delete|msgsnd|exists|values|socket|fileno|format|accept|shmget|shmctl|ioctl|alarm|atan2|utime|untie|bless|chdir|chmod|undef|umask|chomp|times|close|crypt|srand|split|mkdir|sleep|lstat|study|rmdir|local|fcntl|flock|write|shift|index|semop|chown|tell|join|send|warn|kill|wait|grep|glob|bind|last|pack|getc|fork|link|seek|push|rand|read|exit|sort|exec|open|eval|sqrt|redo|stat|chop|next|each|dump|time|recv|tied|goto|keys|pipe|map|tie|cos|die|eof|pop|sin|pos|oct|ref|exp|int|ord|log|our|hex|abs|vec|chr|uc|tr|my|lc)\b">
86 <token type="NameBuiltin"/>
87 </rule>
88 <rule pattern="((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b">
89 <token type="NameBuiltinPseudo"/>
90 </rule>
91 <rule pattern="(<<)([\'"]?)([a-zA-Z_]\w*)(\2;?\n.*?\n)(\3)(\n)">
92 <bygroups>
93 <token type="LiteralString"/>
94 <token type="LiteralString"/>
95 <token type="LiteralStringDelimiter"/>
96 <token type="LiteralString"/>
97 <token type="LiteralStringDelimiter"/>
98 <token type="Text"/>
99 </bygroups>
100 </rule>
101 <rule pattern="__END__">
102 <token type="CommentPreproc"/>
103 <push state="end-part"/>
104 </rule>
105 <rule pattern="\$\^[ADEFHILMOPSTWX]">
106 <token type="NameVariableGlobal"/>
107 </rule>
108 <rule pattern="\$[\\\"\[\]'&`+*.,;=%~?@$!<>(^|/-](?!\w)">
109 <token type="NameVariableGlobal"/>
110 </rule>
111 <rule pattern="[$@%#]+">
112 <token type="NameVariable"/>
113 <push state="varname"/>
114 </rule>
115 <rule pattern="0_?[0-7]+(_[0-7]+)*">
116 <token type="LiteralNumberOct"/>
117 </rule>
118 <rule pattern="0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*">
119 <token type="LiteralNumberHex"/>
120 </rule>
121 <rule pattern="0b[01]+(_[01]+)*">
122 <token type="LiteralNumberBin"/>
123 </rule>
124 <rule pattern="(?i)(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?">
125 <token type="LiteralNumberFloat"/>
126 </rule>
127 <rule pattern="(?i)\d+(_\d*)*e[+-]?\d+(_\d*)*">
128 <token type="LiteralNumberFloat"/>
129 </rule>
130 <rule pattern="\d+(_\d+)*">
131 <token type="LiteralNumberInteger"/>
132 </rule>
133 <rule pattern="'(\\\\|\\[^\\]|[^'\\])*'">
134 <token type="LiteralString"/>
135 </rule>
136 <rule pattern=""(\\\\|\\[^\\]|[^"\\])*"">
137 <token type="LiteralString"/>
138 </rule>
139 <rule pattern="`(\\\\|\\[^\\]|[^`\\])*`">
140 <token type="LiteralStringBacktick"/>
141 </rule>
142 <rule pattern="<([^\s>]+)>">
143 <token type="LiteralStringRegex"/>
144 </rule>
145 <rule pattern="(q|qq|qw|qr|qx)\{">
146 <token type="LiteralStringOther"/>
147 <push state="cb-string"/>
148 </rule>
149 <rule pattern="(q|qq|qw|qr|qx)\(">
150 <token type="LiteralStringOther"/>
151 <push state="rb-string"/>
152 </rule>
153 <rule pattern="(q|qq|qw|qr|qx)\[">
154 <token type="LiteralStringOther"/>
155 <push state="sb-string"/>
156 </rule>
157 <rule pattern="(q|qq|qw|qr|qx)\<">
158 <token type="LiteralStringOther"/>
159 <push state="lt-string"/>
160 </rule>
161 <rule pattern="(q|qq|qw|qr|qx)([\W_])(.|\n)*?\2">
162 <token type="LiteralStringOther"/>
163 </rule>
164 <rule pattern="(package)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)">
165 <bygroups>
166 <token type="Keyword"/>
167 <token type="Text"/>
168 <token type="NameNamespace"/>
169 </bygroups>
170 </rule>
171 <rule pattern="(use|require|no)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)">
172 <bygroups>
173 <token type="Keyword"/>
174 <token type="Text"/>
175 <token type="NameNamespace"/>
176 </bygroups>
177 </rule>
178 <rule pattern="(sub)(\s+)">
179 <bygroups>
180 <token type="Keyword"/>
181 <token type="Text"/>
182 </bygroups>
183 <push state="funcname"/>
184 </rule>
185 <rule pattern="(package|require|use|no)\b">
186 <token type="Keyword"/>
187 </rule>
188 <rule pattern="(\[\]|\*\*|::|<<|>>|>=|<=>|<=|={3}|!=|=~|!~|&&?|\|\||\.{1,3})">
189 <token type="Operator"/>
190 </rule>
191 <rule pattern="[-+/*%=<>&^|!\\~]=?">
192 <token type="Operator"/>
193 </rule>
194 <rule pattern="[()\[\]:;,<>/?{}]">
195 <token type="Punctuation"/>
196 </rule>
197 <rule pattern="(?=\w)">
198 <token type="Name"/>
199 <push state="name"/>
200 </rule>
201 </state>
202 <state name="cb-string">
203 <rule pattern="\\[{}\\]">
204 <token type="LiteralStringOther"/>
205 </rule>
206 <rule pattern="\\">
207 <token type="LiteralStringOther"/>
208 </rule>
209 <rule pattern="\{">
210 <token type="LiteralStringOther"/>
211 <push state="cb-string"/>
212 </rule>
213 <rule pattern="\}">
214 <token type="LiteralStringOther"/>
215 <pop depth="1"/>
216 </rule>
217 <rule pattern="[^{}\\]+">
218 <token type="LiteralStringOther"/>
219 </rule>
220 </state>
221 <state name="balanced-regex">
222 <rule pattern="/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*">
223 <token type="LiteralStringRegex"/>
224 <pop depth="1"/>
225 </rule>
226 <rule pattern="!(\\\\|\\[^\\]|[^\\!])*![egimosx]*">
227 <token type="LiteralStringRegex"/>
228 <pop depth="1"/>
229 </rule>
230 <rule pattern="\\(\\\\|[^\\])*\\[egimosx]*">
231 <token type="LiteralStringRegex"/>
232 <pop depth="1"/>
233 </rule>
234 <rule pattern="\{(\\\\|\\[^\\]|[^\\}])*\}[egimosx]*">
235 <token type="LiteralStringRegex"/>
236 <pop depth="1"/>
237 </rule>
238 <rule pattern="<(\\\\|\\[^\\]|[^\\>])*>[egimosx]*">
239 <token type="LiteralStringRegex"/>
240 <pop depth="1"/>
241 </rule>
242 <rule pattern="\[(\\\\|\\[^\\]|[^\\\]])*\][egimosx]*">
243 <token type="LiteralStringRegex"/>
244 <pop depth="1"/>
245 </rule>
246 <rule pattern="\((\\\\|\\[^\\]|[^\\)])*\)[egimosx]*">
247 <token type="LiteralStringRegex"/>
248 <pop depth="1"/>
249 </rule>
250 <rule pattern="@(\\\\|\\[^\\]|[^\\@])*@[egimosx]*">
251 <token type="LiteralStringRegex"/>
252 <pop depth="1"/>
253 </rule>
254 <rule pattern="%(\\\\|\\[^\\]|[^\\%])*%[egimosx]*">
255 <token type="LiteralStringRegex"/>
256 <pop depth="1"/>
257 </rule>
258 <rule pattern="\$(\\\\|\\[^\\]|[^\\$])*\$[egimosx]*">
259 <token type="LiteralStringRegex"/>
260 <pop depth="1"/>
261 </rule>
262 </state>
263 <state name="lt-string">
264 <rule pattern="\\[<>\\]">
265 <token type="LiteralStringOther"/>
266 </rule>
267 <rule pattern="\\">
268 <token type="LiteralStringOther"/>
269 </rule>
270 <rule pattern="\<">
271 <token type="LiteralStringOther"/>
272 <push state="lt-string"/>
273 </rule>
274 <rule pattern="\>">
275 <token type="LiteralStringOther"/>
276 <pop depth="1"/>
277 </rule>
278 <rule pattern="[^<>]+">
279 <token type="LiteralStringOther"/>
280 </rule>
281 </state>
282 <state name="format">
283 <rule pattern="\.\n">
284 <token type="LiteralStringInterpol"/>
285 <pop depth="1"/>
286 </rule>
287 <rule pattern="[^\n]*\n">
288 <token type="LiteralStringInterpol"/>
289 </rule>
290 </state>
291 <state name="funcname">
292 <rule pattern="[a-zA-Z_]\w*[!?]?">
293 <token type="NameFunction"/>
294 </rule>
295 <rule pattern="\s+">
296 <token type="Text"/>
297 </rule>
298 <rule pattern="(\([$@%]*\))(\s*)">
299 <bygroups>
300 <token type="Punctuation"/>
301 <token type="Text"/>
302 </bygroups>
303 </rule>
304 <rule pattern=";">
305 <token type="Punctuation"/>
306 <pop depth="1"/>
307 </rule>
308 <rule pattern=".*?\{">
309 <token type="Punctuation"/>
310 <pop depth="1"/>
311 </rule>
312 </state>
313 <state name="end-part">
314 <rule pattern=".+">
315 <token type="CommentPreproc"/>
316 <pop depth="1"/>
317 </rule>
318 </state>
319 <state name="varname">
320 <rule pattern="\s+">
321 <token type="Text"/>
322 </rule>
323 <rule pattern="\{">
324 <token type="Punctuation"/>
325 <pop depth="1"/>
326 </rule>
327 <rule pattern="\)|,">
328 <token type="Punctuation"/>
329 <pop depth="1"/>
330 </rule>
331 <rule pattern="\w+::">
332 <token type="NameNamespace"/>
333 </rule>
334 <rule pattern="[\w:]+">
335 <token type="NameVariable"/>
336 <pop depth="1"/>
337 </rule>
338 </state>
339 <state name="name">
340 <rule pattern="[a-zA-Z_]\w*(::[a-zA-Z_]\w*)*(::)?(?=\s*->)">
341 <token type="NameNamespace"/>
342 <pop depth="1"/>
343 </rule>
344 <rule pattern="[a-zA-Z_]\w*(::[a-zA-Z_]\w*)*::">
345 <token type="NameNamespace"/>
346 <pop depth="1"/>
347 </rule>
348 <rule pattern="[\w:]+">
349 <token type="Name"/>
350 <pop depth="1"/>
351 </rule>
352 <rule pattern="[A-Z_]+(?=\W)">
353 <token type="NameConstant"/>
354 <pop depth="1"/>
355 </rule>
356 <rule pattern="(?=\W)">
357 <token type="Text"/>
358 <pop depth="1"/>
359 </rule>
360 </state>
361 <state name="rb-string">
362 <rule pattern="\\[()\\]">
363 <token type="LiteralStringOther"/>
364 </rule>
365 <rule pattern="\\">
366 <token type="LiteralStringOther"/>
367 </rule>
368 <rule pattern="\(">
369 <token type="LiteralStringOther"/>
370 <push state="rb-string"/>
371 </rule>
372 <rule pattern="\)">
373 <token type="LiteralStringOther"/>
374 <pop depth="1"/>
375 </rule>
376 <rule pattern="[^()]+">
377 <token type="LiteralStringOther"/>
378 </rule>
379 </state>
380 <state name="sb-string">
381 <rule pattern="\\[\[\]\\]">
382 <token type="LiteralStringOther"/>
383 </rule>
384 <rule pattern="\\">
385 <token type="LiteralStringOther"/>
386 </rule>
387 <rule pattern="\[">
388 <token type="LiteralStringOther"/>
389 <push state="sb-string"/>
390 </rule>
391 <rule pattern="\]">
392 <token type="LiteralStringOther"/>
393 <pop depth="1"/>
394 </rule>
395 <rule pattern="[^\[\]]+">
396 <token type="LiteralStringOther"/>
397 </rule>
398 </state>
399 </rules>
400</lexer>
View as plain text