66
|
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> |