66
|
1 <lexer>
|
|
2 <config>
|
|
3 <name>Smalltalk</name>
|
|
4 <alias>smalltalk</alias>
|
|
5 <alias>squeak</alias>
|
|
6 <alias>st</alias>
|
|
7 <filename>*.st</filename>
|
|
8 <mime_type>text/x-smalltalk</mime_type>
|
|
9 </config>
|
|
10 <rules>
|
|
11 <state name="inner_parenth">
|
|
12 <rule pattern="\)">
|
|
13 <token type="LiteralStringSymbol"/>
|
|
14 <pop depth="1"/>
|
|
15 </rule>
|
|
16 <rule>
|
|
17 <include state="_parenth_helper"/>
|
|
18 </rule>
|
|
19 </state>
|
|
20 <state name="objects">
|
|
21 <rule pattern="\[">
|
|
22 <token type="Text"/>
|
|
23 <push state="blockvariables"/>
|
|
24 </rule>
|
|
25 <rule pattern="\]">
|
|
26 <token type="Text"/>
|
|
27 <push state="afterobject"/>
|
|
28 </rule>
|
|
29 <rule pattern="\b(self|super|true|false|nil|thisContext)\b">
|
|
30 <token type="NameBuiltinPseudo"/>
|
|
31 <push state="afterobject"/>
|
|
32 </rule>
|
|
33 <rule pattern="\b[A-Z]\w*(?!:)\b">
|
|
34 <token type="NameClass"/>
|
|
35 <push state="afterobject"/>
|
|
36 </rule>
|
|
37 <rule pattern="\b[a-z]\w*(?!:)\b">
|
|
38 <token type="NameVariable"/>
|
|
39 <push state="afterobject"/>
|
|
40 </rule>
|
|
41 <rule pattern="#("(""|[^"])*"|[-+*/\\~<>=|&!?,@%]+|[\w:]+)">
|
|
42 <token type="LiteralStringSymbol"/>
|
|
43 <push state="afterobject"/>
|
|
44 </rule>
|
|
45 <rule>
|
|
46 <include state="literals"/>
|
|
47 </rule>
|
|
48 </state>
|
|
49 <state name="afterobject">
|
|
50 <rule pattern="! !$">
|
|
51 <token type="Keyword"/>
|
|
52 <pop depth="1"/>
|
|
53 </rule>
|
|
54 <rule>
|
|
55 <include state="whitespaces"/>
|
|
56 </rule>
|
|
57 <rule pattern="\b(ifTrue:|ifFalse:|whileTrue:|whileFalse:|timesRepeat:)">
|
|
58 <token type="NameBuiltin"/>
|
|
59 <pop depth="1"/>
|
|
60 </rule>
|
|
61 <rule pattern="\b(new\b(?!:))">
|
|
62 <token type="NameBuiltin"/>
|
|
63 </rule>
|
|
64 <rule pattern=":=|_">
|
|
65 <token type="Operator"/>
|
|
66 <pop depth="1"/>
|
|
67 </rule>
|
|
68 <rule pattern="\b[a-zA-Z]+\w*:">
|
|
69 <token type="NameFunction"/>
|
|
70 <pop depth="1"/>
|
|
71 </rule>
|
|
72 <rule pattern="\b[a-zA-Z]+\w*">
|
|
73 <token type="NameFunction"/>
|
|
74 </rule>
|
|
75 <rule pattern="\w+:?|[-+*/\\~<>=|&!?,@%]+">
|
|
76 <token type="NameFunction"/>
|
|
77 <pop depth="1"/>
|
|
78 </rule>
|
|
79 <rule pattern="\.">
|
|
80 <token type="Punctuation"/>
|
|
81 <pop depth="1"/>
|
|
82 </rule>
|
|
83 <rule pattern=";">
|
|
84 <token type="Punctuation"/>
|
|
85 </rule>
|
|
86 <rule pattern="[\])}]">
|
|
87 <token type="Text"/>
|
|
88 </rule>
|
|
89 <rule pattern="[\[({]">
|
|
90 <token type="Text"/>
|
|
91 <pop depth="1"/>
|
|
92 </rule>
|
|
93 </state>
|
|
94 <state name="literals">
|
|
95 <rule pattern="'(''|[^'])*'">
|
|
96 <token type="LiteralString"/>
|
|
97 <push state="afterobject"/>
|
|
98 </rule>
|
|
99 <rule pattern="\$.">
|
|
100 <token type="LiteralStringChar"/>
|
|
101 <push state="afterobject"/>
|
|
102 </rule>
|
|
103 <rule pattern="#\(">
|
|
104 <token type="LiteralStringSymbol"/>
|
|
105 <push state="parenth"/>
|
|
106 </rule>
|
|
107 <rule pattern="\)">
|
|
108 <token type="Text"/>
|
|
109 <push state="afterobject"/>
|
|
110 </rule>
|
|
111 <rule pattern="(\d+r)?-?\d+(\.\d+)?(e-?\d+)?">
|
|
112 <token type="LiteralNumber"/>
|
|
113 <push state="afterobject"/>
|
|
114 </rule>
|
|
115 </state>
|
|
116 <state name="root">
|
|
117 <rule pattern="(<)(\w+:)(.*?)(>)">
|
|
118 <bygroups>
|
|
119 <token type="Text"/>
|
|
120 <token type="Keyword"/>
|
|
121 <token type="Text"/>
|
|
122 <token type="Text"/>
|
|
123 </bygroups>
|
|
124 </rule>
|
|
125 <rule>
|
|
126 <include state="squeak fileout"/>
|
|
127 </rule>
|
|
128 <rule>
|
|
129 <include state="whitespaces"/>
|
|
130 </rule>
|
|
131 <rule>
|
|
132 <include state="method definition"/>
|
|
133 </rule>
|
|
134 <rule pattern="(\|)([\w\s]*)(\|)">
|
|
135 <bygroups>
|
|
136 <token type="Operator"/>
|
|
137 <token type="NameVariable"/>
|
|
138 <token type="Operator"/>
|
|
139 </bygroups>
|
|
140 </rule>
|
|
141 <rule>
|
|
142 <include state="objects"/>
|
|
143 </rule>
|
|
144 <rule pattern="\^|:=|_">
|
|
145 <token type="Operator"/>
|
|
146 </rule>
|
|
147 <rule pattern="[\]({}.;!]">
|
|
148 <token type="Text"/>
|
|
149 </rule>
|
|
150 </state>
|
|
151 <state name="_parenth_helper">
|
|
152 <rule>
|
|
153 <include state="whitespaces"/>
|
|
154 </rule>
|
|
155 <rule pattern="(\d+r)?-?\d+(\.\d+)?(e-?\d+)?">
|
|
156 <token type="LiteralNumber"/>
|
|
157 </rule>
|
|
158 <rule pattern="[-+*/\\~<>=|&#!?,@%\w:]+">
|
|
159 <token type="LiteralStringSymbol"/>
|
|
160 </rule>
|
|
161 <rule pattern="'(''|[^'])*'">
|
|
162 <token type="LiteralString"/>
|
|
163 </rule>
|
|
164 <rule pattern="\$.">
|
|
165 <token type="LiteralStringChar"/>
|
|
166 </rule>
|
|
167 <rule pattern="#*\(">
|
|
168 <token type="LiteralStringSymbol"/>
|
|
169 <push state="inner_parenth"/>
|
|
170 </rule>
|
|
171 </state>
|
|
172 <state name="parenth">
|
|
173 <rule pattern="\)">
|
|
174 <token type="LiteralStringSymbol"/>
|
|
175 <push state="root" state="afterobject"/>
|
|
176 </rule>
|
|
177 <rule>
|
|
178 <include state="_parenth_helper"/>
|
|
179 </rule>
|
|
180 </state>
|
|
181 <state name="whitespaces">
|
|
182 <rule pattern="\s+">
|
|
183 <token type="Text"/>
|
|
184 </rule>
|
|
185 <rule pattern=""(""|[^"])*"">
|
|
186 <token type="Comment"/>
|
|
187 </rule>
|
|
188 </state>
|
|
189 <state name="squeak fileout">
|
|
190 <rule pattern="^"(""|[^"])*"!">
|
|
191 <token type="Keyword"/>
|
|
192 </rule>
|
|
193 <rule pattern="^'(''|[^'])*'!">
|
|
194 <token type="Keyword"/>
|
|
195 </rule>
|
|
196 <rule pattern="^(!)(\w+)( commentStamp: )(.*?)( prior: .*?!\n)(.*?)(!)">
|
|
197 <bygroups>
|
|
198 <token type="Keyword"/>
|
|
199 <token type="NameClass"/>
|
|
200 <token type="Keyword"/>
|
|
201 <token type="LiteralString"/>
|
|
202 <token type="Keyword"/>
|
|
203 <token type="Text"/>
|
|
204 <token type="Keyword"/>
|
|
205 </bygroups>
|
|
206 </rule>
|
|
207 <rule pattern="^(!)(\w+(?: class)?)( methodsFor: )('(?:''|[^'])*')(.*?!)">
|
|
208 <bygroups>
|
|
209 <token type="Keyword"/>
|
|
210 <token type="NameClass"/>
|
|
211 <token type="Keyword"/>
|
|
212 <token type="LiteralString"/>
|
|
213 <token type="Keyword"/>
|
|
214 </bygroups>
|
|
215 </rule>
|
|
216 <rule pattern="^(\w+)( subclass: )(#\w+)(\s+instanceVariableNames: )(.*?)(\s+classVariableNames: )(.*?)(\s+poolDictionaries: )(.*?)(\s+category: )(.*?)(!)">
|
|
217 <bygroups>
|
|
218 <token type="NameClass"/>
|
|
219 <token type="Keyword"/>
|
|
220 <token type="LiteralStringSymbol"/>
|
|
221 <token type="Keyword"/>
|
|
222 <token type="LiteralString"/>
|
|
223 <token type="Keyword"/>
|
|
224 <token type="LiteralString"/>
|
|
225 <token type="Keyword"/>
|
|
226 <token type="LiteralString"/>
|
|
227 <token type="Keyword"/>
|
|
228 <token type="LiteralString"/>
|
|
229 <token type="Keyword"/>
|
|
230 </bygroups>
|
|
231 </rule>
|
|
232 <rule pattern="^(\w+(?: class)?)(\s+instanceVariableNames: )(.*?)(!)">
|
|
233 <bygroups>
|
|
234 <token type="NameClass"/>
|
|
235 <token type="Keyword"/>
|
|
236 <token type="LiteralString"/>
|
|
237 <token type="Keyword"/>
|
|
238 </bygroups>
|
|
239 </rule>
|
|
240 <rule pattern="(!\n)(\].*)(! !)$">
|
|
241 <bygroups>
|
|
242 <token type="Keyword"/>
|
|
243 <token type="Text"/>
|
|
244 <token type="Keyword"/>
|
|
245 </bygroups>
|
|
246 </rule>
|
|
247 <rule pattern="! !$">
|
|
248 <token type="Keyword"/>
|
|
249 </rule>
|
|
250 </state>
|
|
251 <state name="method definition">
|
|
252 <rule pattern="([a-zA-Z]+\w*:)(\s*)(\w+)">
|
|
253 <bygroups>
|
|
254 <token type="NameFunction"/>
|
|
255 <token type="Text"/>
|
|
256 <token type="NameVariable"/>
|
|
257 </bygroups>
|
|
258 </rule>
|
|
259 <rule pattern="^(\b[a-zA-Z]+\w*\b)(\s*)$">
|
|
260 <bygroups>
|
|
261 <token type="NameFunction"/>
|
|
262 <token type="Text"/>
|
|
263 </bygroups>
|
|
264 </rule>
|
|
265 <rule pattern="^([-+*/\\~<>=|&!?,@%]+)(\s*)(\w+)(\s*)$">
|
|
266 <bygroups>
|
|
267 <token type="NameFunction"/>
|
|
268 <token type="Text"/>
|
|
269 <token type="NameVariable"/>
|
|
270 <token type="Text"/>
|
|
271 </bygroups>
|
|
272 </rule>
|
|
273 </state>
|
|
274 <state name="blockvariables">
|
|
275 <rule>
|
|
276 <include state="whitespaces"/>
|
|
277 </rule>
|
|
278 <rule pattern="(:)(\s*)(\w+)">
|
|
279 <bygroups>
|
|
280 <token type="Operator"/>
|
|
281 <token type="Text"/>
|
|
282 <token type="NameVariable"/>
|
|
283 </bygroups>
|
|
284 </rule>
|
|
285 <rule pattern="\|">
|
|
286 <token type="Operator"/>
|
|
287 <pop depth="1"/>
|
|
288 </rule>
|
|
289 <rule>
|
|
290 <pop depth="1"/>
|
|
291 </rule>
|
|
292 </state>
|
|
293 </rules>
|
|
294 </lexer> |