Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /smlnj-lib/trunk/JSON/json.lex.sml
ViewVC logotype

Annotation of /smlnj-lib/trunk/JSON/json.lex.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3206 - (view) (download)

1 : jhr 3206 structure JSONLexer = struct
2 :    
3 :     datatype yystart_state =
4 :     S | INITIAL
5 :     structure UserDeclarations =
6 :     struct
7 :    
8 :    
9 :     structure T = JSONTokens
10 :     type lex_result = T.token
11 :     fun eof () = T.EOF
12 :     fun int s = T.INT(valOf(IntInf.fromString s))
13 :     fun float s = T.FLOAT(valOf(LargeReal.fromString s))
14 :     (* support for incremental construction of strings *)
15 :     val sbuf : string list ref = ref []
16 :     fun addStr s = sbuf := s :: !sbuf
17 :     fun addUChr lit = let
18 :     (* trim the "\u" prefix *)
19 :     val digits = Substring.triml 2 (Substring.full lit)
20 :     val SOME(w, _) = Word.scan StringCvt.HEX Substring.getc digits
21 :     in
22 :     addStr(UTF8.encode w)
23 :     end
24 :     fun finishString () = (T.STRING(String.concat(List.rev(!sbuf))) before sbuf := [])
25 :    
26 :    
27 :     end
28 :    
29 :     local
30 :     datatype yymatch
31 :     = yyNO_MATCH
32 :     | yyMATCH of ULexBuffer.stream * action * yymatch
33 :     withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result
34 :    
35 :     val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector =
36 :     Vector.fromList []
37 :     fun yystreamify' p input = ULexBuffer.mkStream (p, input)
38 :    
39 :     fun yystreamifyReader' p readFn strm = let
40 :     val s = ref strm
41 :     fun iter(strm, n, accum) =
42 :     if n > 1024 then (String.implode (rev accum), strm)
43 :     else (case readFn strm
44 :     of NONE => (String.implode (rev accum), strm)
45 :     | SOME(c, strm') => iter (strm', n+1, c::accum))
46 :     fun input() = let
47 :     val (data, strm) = iter(!s, 0, [])
48 :     in
49 :     s := strm;
50 :     data
51 :     end
52 :     in
53 :     yystreamify' p input
54 :     end
55 :    
56 :     fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm)
57 :    
58 :     fun innerLex
59 :     (yystrm_, yyss_, yysm) = let
60 :     (* current start state *)
61 :     val yyss = ref yyss_
62 :     fun YYBEGIN ss = (yyss := ss)
63 :     (* current input stream *)
64 :     val yystrm = ref yystrm_
65 :     fun yysetStrm strm = yystrm := strm
66 :     fun yygetPos() = ULexBuffer.getpos (!yystrm)
67 :     fun yystreamify input = yystreamify' (yygetPos()) input
68 :     fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm
69 :     fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm
70 :     (* start position of token -- can be updated via skip() *)
71 :     val yystartPos = ref (yygetPos())
72 :     (* get one char of input *)
73 :     fun yygetc strm = (case UTF8.getu ULexBuffer.getc strm
74 :     of (SOME (0w10, s')) =>
75 :     (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm);
76 :     SOME (0w10, s'))
77 :     | x => x)
78 :     fun yygetList getc strm = let
79 :     val get1 = UTF8.getu getc
80 :     fun iter (strm, accum) =
81 :     (case get1 strm
82 :     of NONE => rev accum
83 :     | SOME (w, strm') => iter (strm', w::accum)
84 :     (* end case *))
85 :     in
86 :     iter (strm, [])
87 :     end
88 :     (* create yytext *)
89 :     fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm)
90 :     fun yymktext(strm) = Substring.string (yymksubstr strm)
91 :     fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm)
92 :     open UserDeclarations
93 :     fun lex () = let
94 :     fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state"
95 :     | yystuck (yyMATCH (strm, action, old)) =
96 :     action (strm, old)
97 :     val yypos = yygetPos()
98 :     fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm)
99 :     fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm)
100 :     fun yyactsToMatches (strm, [], oldMatches) = oldMatches
101 :     | yyactsToMatches (strm, act::acts, oldMatches) =
102 :     yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches))
103 :     fun yygo actTable =
104 :     (fn (~1, _, oldMatches) => yystuck oldMatches
105 :     | (curState, strm, oldMatches) => let
106 :     val (transitions, finals') = Vector.sub (yytable, curState)
107 :     val finals = map (fn i => Vector.sub (actTable, i)) finals'
108 :     fun tryfinal() =
109 :     yystuck (yyactsToMatches (strm, finals, oldMatches))
110 :     fun find (c, []) = NONE
111 :     | find (c, (c1, c2, s)::ts) =
112 :     if c1 <= c andalso c <= c2 then SOME s
113 :     else find (c, ts)
114 :     in case yygetc strm
115 :     of SOME(c, strm') =>
116 :     (case find (c, transitions)
117 :     of NONE => tryfinal()
118 :     | SOME n =>
119 :     yygo actTable
120 :     (n, strm',
121 :     yyactsToMatches (strm, finals, oldMatches)))
122 :     | NONE => tryfinal()
123 :     end)
124 :     val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm))
125 :     fun continue() = let val yylastwasn = !yylastwasnref in
126 :     let
127 :     fun yyAction0 (strm, lastMatch : yymatch) = (yystrm := strm; skip() )
128 :     fun yyAction1 (strm, lastMatch : yymatch) = (yystrm := strm; T.LCB )
129 :     fun yyAction2 (strm, lastMatch : yymatch) = (yystrm := strm; T.RCB )
130 :     fun yyAction3 (strm, lastMatch : yymatch) = (yystrm := strm; T.LB )
131 :     fun yyAction4 (strm, lastMatch : yymatch) = (yystrm := strm; T.RB )
132 :     fun yyAction5 (strm, lastMatch : yymatch) = (yystrm := strm; T.COMMA )
133 :     fun yyAction6 (strm, lastMatch : yymatch) = (yystrm := strm; T.COLON )
134 :     fun yyAction7 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_null )
135 :     fun yyAction8 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_true )
136 :     fun yyAction9 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_false )
137 :     fun yyAction10 (strm, lastMatch : yymatch) = let
138 :     val yytext = yymktext(strm)
139 :     in
140 :     yystrm := strm; T.INT(valOf(IntInf.fromString yytext))
141 :     end
142 :     fun yyAction11 (strm, lastMatch : yymatch) = let
143 :     val yytext = yymktext(strm)
144 :     in
145 :     yystrm := strm; float yytext
146 :     end
147 :     fun yyAction12 (strm, lastMatch : yymatch) = let
148 :     val yytext = yymktext(strm)
149 :     in
150 :     yystrm := strm; float yytext
151 :     end
152 :     fun yyAction13 (strm, lastMatch : yymatch) = let
153 :     val yytext = yymktext(strm)
154 :     in
155 :     yystrm := strm; float yytext
156 :     end
157 :     fun yyAction14 (strm, lastMatch : yymatch) = (yystrm := strm;
158 :     YYBEGIN S; continue() )
159 :     fun yyAction15 (strm, lastMatch : yymatch) = (yystrm := strm;
160 :     addStr "\\"; continue() )
161 :     fun yyAction16 (strm, lastMatch : yymatch) = (yystrm := strm;
162 :     addStr "/"; continue() )
163 :     fun yyAction17 (strm, lastMatch : yymatch) = (yystrm := strm;
164 :     addStr "\b"; continue() )
165 :     fun yyAction18 (strm, lastMatch : yymatch) = (yystrm := strm;
166 :     addStr "\f"; continue() )
167 :     fun yyAction19 (strm, lastMatch : yymatch) = (yystrm := strm;
168 :     addStr "\n"; continue() )
169 :     fun yyAction20 (strm, lastMatch : yymatch) = (yystrm := strm;
170 :     addStr "\r"; continue() )
171 :     fun yyAction21 (strm, lastMatch : yymatch) = (yystrm := strm;
172 :     addStr "\t"; continue() )
173 :     fun yyAction22 (strm, lastMatch : yymatch) = let
174 :     val yytext = yymktext(strm)
175 :     in
176 :     yystrm := strm; addUChr yytext; continue()
177 :     end
178 :     fun yyAction23 (strm, lastMatch : yymatch) = let
179 :     val yytext = yymktext(strm)
180 :     in
181 :     yystrm := strm; addStr yytext; continue()
182 :     end
183 :     fun yyAction24 (strm, lastMatch : yymatch) = (yystrm := strm;
184 :     YYBEGIN INITIAL; finishString() )
185 :     fun yyAction25 (strm, lastMatch : yymatch) = (yystrm := strm; skip() )
186 :     fun yyAction26 (strm, lastMatch : yymatch) = (yystrm := strm; skip() )
187 :     fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm))
188 :     of NONE => yyAction2(strm, yyNO_MATCH)
189 :     | SOME(inp, strm') => yyAction2(strm, yyNO_MATCH)
190 :     (* end case *))
191 :     fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm))
192 :     of NONE => yyAction1(strm, yyNO_MATCH)
193 :     | SOME(inp, strm') => yyAction1(strm, yyNO_MATCH)
194 :     (* end case *))
195 :     fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm))
196 :     of NONE => yyAction8(strm, yyNO_MATCH)
197 :     | SOME(inp, strm') => yyAction8(strm, yyNO_MATCH)
198 :     (* end case *))
199 :     fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm))
200 :     of NONE => yystuck(lastMatch)
201 :     | SOME(inp, strm') =>
202 :     if inp = 0wx65
203 :     then yyQ35(strm', lastMatch)
204 :     else yystuck(lastMatch)
205 :     (* end case *))
206 :     fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm))
207 :     of NONE => yystuck(lastMatch)
208 :     | SOME(inp, strm') =>
209 :     if inp = 0wx75
210 :     then yyQ34(strm', lastMatch)
211 :     else yystuck(lastMatch)
212 :     (* end case *))
213 :     fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm))
214 :     of NONE => yyAction26(strm, yyNO_MATCH)
215 :     | SOME(inp, strm') =>
216 :     if inp = 0wx72
217 :     then yyQ33(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
218 :     else yyAction26(strm, yyNO_MATCH)
219 :     (* end case *))
220 :     fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm))
221 :     of NONE => yyAction7(strm, yyNO_MATCH)
222 :     | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH)
223 :     (* end case *))
224 :     fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm))
225 :     of NONE => yystuck(lastMatch)
226 :     | SOME(inp, strm') =>
227 :     if inp = 0wx6C
228 :     then yyQ38(strm', lastMatch)
229 :     else yystuck(lastMatch)
230 :     (* end case *))
231 :     fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm))
232 :     of NONE => yystuck(lastMatch)
233 :     | SOME(inp, strm') =>
234 :     if inp = 0wx6C
235 :     then yyQ37(strm', lastMatch)
236 :     else yystuck(lastMatch)
237 :     (* end case *))
238 :     fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm))
239 :     of NONE => yyAction26(strm, yyNO_MATCH)
240 :     | SOME(inp, strm') =>
241 :     if inp = 0wx75
242 :     then yyQ36(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
243 :     else yyAction26(strm, yyNO_MATCH)
244 :     (* end case *))
245 :     fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm))
246 :     of NONE => yyAction9(strm, yyNO_MATCH)
247 :     | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH)
248 :     (* end case *))
249 :     fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm))
250 :     of NONE => yystuck(lastMatch)
251 :     | SOME(inp, strm') =>
252 :     if inp = 0wx65
253 :     then yyQ42(strm', lastMatch)
254 :     else yystuck(lastMatch)
255 :     (* end case *))
256 :     fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm))
257 :     of NONE => yystuck(lastMatch)
258 :     | SOME(inp, strm') =>
259 :     if inp = 0wx73
260 :     then yyQ41(strm', lastMatch)
261 :     else yystuck(lastMatch)
262 :     (* end case *))
263 :     fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm))
264 :     of NONE => yystuck(lastMatch)
265 :     | SOME(inp, strm') =>
266 :     if inp = 0wx6C
267 :     then yyQ40(strm', lastMatch)
268 :     else yystuck(lastMatch)
269 :     (* end case *))
270 :     fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm))
271 :     of NONE => yyAction26(strm, yyNO_MATCH)
272 :     | SOME(inp, strm') =>
273 :     if inp = 0wx61
274 :     then yyQ39(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
275 :     else yyAction26(strm, yyNO_MATCH)
276 :     (* end case *))
277 :     fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm))
278 :     of NONE => yyAction4(strm, yyNO_MATCH)
279 :     | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH)
280 :     (* end case *))
281 :     fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm))
282 :     of NONE => yyAction3(strm, yyNO_MATCH)
283 :     | SOME(inp, strm') => yyAction3(strm, yyNO_MATCH)
284 :     (* end case *))
285 :     fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm))
286 :     of NONE => yyAction6(strm, yyNO_MATCH)
287 :     | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH)
288 :     (* end case *))
289 :     fun yyQ47 (strm, lastMatch : yymatch) = (case (yygetc(strm))
290 :     of NONE => yyAction12(strm, yyNO_MATCH)
291 :     | SOME(inp, strm') =>
292 :     if inp = 0wx30
293 :     then yyQ47(strm', yyMATCH(strm, yyAction12, yyNO_MATCH))
294 :     else if inp < 0wx30
295 :     then yyAction12(strm, yyNO_MATCH)
296 :     else if inp <= 0wx39
297 :     then yyQ47(strm', yyMATCH(strm, yyAction12, yyNO_MATCH))
298 :     else yyAction12(strm, yyNO_MATCH)
299 :     (* end case *))
300 :     fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm))
301 :     of NONE => yystuck(lastMatch)
302 :     | SOME(inp, strm') =>
303 :     if inp = 0wx30
304 :     then yyQ47(strm', lastMatch)
305 :     else if inp < 0wx30
306 :     then yystuck(lastMatch)
307 :     else if inp <= 0wx39
308 :     then yyQ47(strm', lastMatch)
309 :     else yystuck(lastMatch)
310 :     (* end case *))
311 :     fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm))
312 :     of NONE => yystuck(lastMatch)
313 :     | SOME(inp, strm') =>
314 :     if inp = 0wx2D
315 :     then yyQ46(strm', lastMatch)
316 :     else if inp < 0wx2D
317 :     then if inp = 0wx2B
318 :     then yyQ46(strm', lastMatch)
319 :     else yystuck(lastMatch)
320 :     else if inp = 0wx30
321 :     then yyQ47(strm', lastMatch)
322 :     else if inp < 0wx30
323 :     then yystuck(lastMatch)
324 :     else if inp <= 0wx39
325 :     then yyQ47(strm', lastMatch)
326 :     else yystuck(lastMatch)
327 :     (* end case *))
328 :     fun yyQ51 (strm, lastMatch : yymatch) = (case (yygetc(strm))
329 :     of NONE => yyAction13(strm, yyNO_MATCH)
330 :     | SOME(inp, strm') =>
331 :     if inp = 0wx30
332 :     then yyQ51(strm', yyMATCH(strm, yyAction13, yyNO_MATCH))
333 :     else if inp < 0wx30
334 :     then yyAction13(strm, yyNO_MATCH)
335 :     else if inp <= 0wx39
336 :     then yyQ51(strm', yyMATCH(strm, yyAction13, yyNO_MATCH))
337 :     else yyAction13(strm, yyNO_MATCH)
338 :     (* end case *))
339 :     fun yyQ50 (strm, lastMatch : yymatch) = (case (yygetc(strm))
340 :     of NONE => yystuck(lastMatch)
341 :     | SOME(inp, strm') =>
342 :     if inp = 0wx30
343 :     then yyQ51(strm', lastMatch)
344 :     else if inp < 0wx30
345 :     then yystuck(lastMatch)
346 :     else if inp <= 0wx39
347 :     then yyQ51(strm', lastMatch)
348 :     else yystuck(lastMatch)
349 :     (* end case *))
350 :     fun yyQ49 (strm, lastMatch : yymatch) = (case (yygetc(strm))
351 :     of NONE => yystuck(lastMatch)
352 :     | SOME(inp, strm') =>
353 :     if inp = 0wx2D
354 :     then yyQ50(strm', lastMatch)
355 :     else if inp < 0wx2D
356 :     then if inp = 0wx2B
357 :     then yyQ50(strm', lastMatch)
358 :     else yystuck(lastMatch)
359 :     else if inp = 0wx30
360 :     then yyQ51(strm', lastMatch)
361 :     else if inp < 0wx30
362 :     then yystuck(lastMatch)
363 :     else if inp <= 0wx39
364 :     then yyQ51(strm', lastMatch)
365 :     else yystuck(lastMatch)
366 :     (* end case *))
367 :     fun yyQ48 (strm, lastMatch : yymatch) = (case (yygetc(strm))
368 :     of NONE => yyAction11(strm, yyNO_MATCH)
369 :     | SOME(inp, strm') =>
370 :     if inp = 0wx45
371 :     then yyQ49(strm', yyMATCH(strm, yyAction11, yyNO_MATCH))
372 :     else if inp < 0wx45
373 :     then if inp = 0wx30
374 :     then yyQ48(strm', yyMATCH(strm, yyAction11, yyNO_MATCH))
375 :     else if inp < 0wx30
376 :     then yyAction11(strm, yyNO_MATCH)
377 :     else if inp <= 0wx39
378 :     then yyQ48(strm', yyMATCH(strm, yyAction11, yyNO_MATCH))
379 :     else yyAction11(strm, yyNO_MATCH)
380 :     else if inp = 0wx65
381 :     then yyQ49(strm', yyMATCH(strm, yyAction11, yyNO_MATCH))
382 :     else yyAction11(strm, yyNO_MATCH)
383 :     (* end case *))
384 :     fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm))
385 :     of NONE => yystuck(lastMatch)
386 :     | SOME(inp, strm') =>
387 :     if inp = 0wx30
388 :     then yyQ48(strm', lastMatch)
389 :     else if inp < 0wx30
390 :     then yystuck(lastMatch)
391 :     else if inp <= 0wx39
392 :     then yyQ48(strm', lastMatch)
393 :     else yystuck(lastMatch)
394 :     (* end case *))
395 :     fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm))
396 :     of NONE => yyAction10(strm, yyNO_MATCH)
397 :     | SOME(inp, strm') =>
398 :     if inp = 0wx3A
399 :     then yyAction10(strm, yyNO_MATCH)
400 :     else if inp < 0wx3A
401 :     then if inp = 0wx2F
402 :     then yyAction10(strm, yyNO_MATCH)
403 :     else if inp < 0wx2F
404 :     then if inp = 0wx2E
405 :     then yyQ43(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
406 :     else yyAction10(strm, yyNO_MATCH)
407 :     else yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
408 :     else if inp = 0wx46
409 :     then yyAction10(strm, yyNO_MATCH)
410 :     else if inp < 0wx46
411 :     then if inp = 0wx45
412 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
413 :     else yyAction10(strm, yyNO_MATCH)
414 :     else if inp = 0wx65
415 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
416 :     else yyAction10(strm, yyNO_MATCH)
417 :     (* end case *))
418 :     fun yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm))
419 :     of NONE => yyAction10(strm, yyNO_MATCH)
420 :     | SOME(inp, strm') =>
421 :     if inp = 0wx3A
422 :     then yyAction10(strm, yyNO_MATCH)
423 :     else if inp < 0wx3A
424 :     then if inp = 0wx2F
425 :     then yyAction10(strm, yyNO_MATCH)
426 :     else if inp < 0wx2F
427 :     then if inp = 0wx2E
428 :     then yyQ43(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
429 :     else yyAction10(strm, yyNO_MATCH)
430 :     else yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
431 :     else if inp = 0wx46
432 :     then yyAction10(strm, yyNO_MATCH)
433 :     else if inp < 0wx46
434 :     then if inp = 0wx45
435 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
436 :     else yyAction10(strm, yyNO_MATCH)
437 :     else if inp = 0wx65
438 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
439 :     else yyAction10(strm, yyNO_MATCH)
440 :     (* end case *))
441 :     fun yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm))
442 :     of NONE => yyAction10(strm, yyNO_MATCH)
443 :     | SOME(inp, strm') =>
444 :     if inp = 0wx45
445 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
446 :     else if inp < 0wx45
447 :     then if inp = 0wx2E
448 :     then yyQ43(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
449 :     else yyAction10(strm, yyNO_MATCH)
450 :     else if inp = 0wx65
451 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
452 :     else yyAction10(strm, yyNO_MATCH)
453 :     (* end case *))
454 :     fun yyQ56 (strm, lastMatch : yymatch) = (case (yygetc(strm))
455 :     of NONE => yystuck(lastMatch)
456 :     | SOME(inp, strm') =>
457 :     if inp = 0wx2A
458 :     then yyQ56(strm', lastMatch)
459 :     else yyQ55(strm', lastMatch)
460 :     (* end case *))
461 :     and yyQ55 (strm, lastMatch : yymatch) = (case (yygetc(strm))
462 :     of NONE => yystuck(lastMatch)
463 :     | SOME(inp, strm') =>
464 :     if inp = 0wx2A
465 :     then yyQ56(strm', lastMatch)
466 :     else yyQ55(strm', lastMatch)
467 :     (* end case *))
468 :     fun yyQ54 (strm, lastMatch : yymatch) = (case (yygetc(strm))
469 :     of NONE => yyAction25(strm, yyNO_MATCH)
470 :     | SOME(inp, strm') =>
471 :     if inp = 0wx2A
472 :     then yyQ56(strm', yyMATCH(strm, yyAction25, yyNO_MATCH))
473 :     else yyQ55(strm', yyMATCH(strm, yyAction25, yyNO_MATCH))
474 :     (* end case *))
475 :     fun yyQ52 (strm, lastMatch : yymatch) = (case (yygetc(strm))
476 :     of NONE => yystuck(lastMatch)
477 :     | SOME(inp, strm') =>
478 :     if inp = 0wx2A
479 :     then yyQ53(strm', lastMatch)
480 :     else yyQ52(strm', lastMatch)
481 :     (* end case *))
482 :     and yyQ53 (strm, lastMatch : yymatch) = (case (yygetc(strm))
483 :     of NONE => yystuck(lastMatch)
484 :     | SOME(inp, strm') =>
485 :     if inp = 0wx2B
486 :     then yyQ52(strm', lastMatch)
487 :     else if inp < 0wx2B
488 :     then if inp = 0wx2A
489 :     then yyQ53(strm', lastMatch)
490 :     else yyQ52(strm', lastMatch)
491 :     else if inp = 0wx2F
492 :     then yyQ54(strm', lastMatch)
493 :     else yyQ52(strm', lastMatch)
494 :     (* end case *))
495 :     fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm))
496 :     of NONE => yyAction26(strm, yyNO_MATCH)
497 :     | SOME(inp, strm') =>
498 :     if inp = 0wx2A
499 :     then yyQ52(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
500 :     else yyAction26(strm, yyNO_MATCH)
501 :     (* end case *))
502 :     fun yyQ58 (strm, lastMatch : yymatch) = (case (yygetc(strm))
503 :     of NONE => yyAction10(strm, yyNO_MATCH)
504 :     | SOME(inp, strm') =>
505 :     if inp = 0wx3A
506 :     then yyAction10(strm, yyNO_MATCH)
507 :     else if inp < 0wx3A
508 :     then if inp = 0wx2F
509 :     then yyAction10(strm, yyNO_MATCH)
510 :     else if inp < 0wx2F
511 :     then if inp = 0wx2E
512 :     then yyQ43(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
513 :     else yyAction10(strm, yyNO_MATCH)
514 :     else yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
515 :     else if inp = 0wx46
516 :     then yyAction10(strm, yyNO_MATCH)
517 :     else if inp < 0wx46
518 :     then if inp = 0wx45
519 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
520 :     else yyAction10(strm, yyNO_MATCH)
521 :     else if inp = 0wx65
522 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
523 :     else yyAction10(strm, yyNO_MATCH)
524 :     (* end case *))
525 :     fun yyQ57 (strm, lastMatch : yymatch) = (case (yygetc(strm))
526 :     of NONE => yyAction10(strm, yyNO_MATCH)
527 :     | SOME(inp, strm') =>
528 :     if inp = 0wx45
529 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
530 :     else if inp < 0wx45
531 :     then if inp = 0wx2E
532 :     then yyQ43(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
533 :     else yyAction10(strm, yyNO_MATCH)
534 :     else if inp = 0wx65
535 :     then yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH))
536 :     else yyAction10(strm, yyNO_MATCH)
537 :     (* end case *))
538 :     fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm))
539 :     of NONE => yyAction26(strm, yyNO_MATCH)
540 :     | SOME(inp, strm') =>
541 :     if inp = 0wx31
542 :     then yyQ58(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
543 :     else if inp < 0wx31
544 :     then if inp = 0wx30
545 :     then yyQ57(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
546 :     else yyAction26(strm, yyNO_MATCH)
547 :     else if inp <= 0wx39
548 :     then yyQ58(strm', yyMATCH(strm, yyAction26, yyNO_MATCH))
549 :     else yyAction26(strm, yyNO_MATCH)
550 :     (* end case *))
551 :     fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm))
552 :     of NONE => yyAction5(strm, yyNO_MATCH)
553 :     | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH)
554 :     (* end case *))
555 :     fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm))
556 :     of NONE => yyAction14(strm, yyNO_MATCH)
557 :     | SOME(inp, strm') => yyAction14(strm, yyNO_MATCH)
558 :     (* end case *))
559 :     fun yyQ59 (strm, lastMatch : yymatch) = (case (yygetc(strm))
560 :     of NONE => yyAction0(strm, yyNO_MATCH)
561 :     | SOME(inp, strm') =>
562 :     if inp = 0wxD
563 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
564 :     else if inp < 0wxD
565 :     then if inp = 0wx9
566 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
567 :     else if inp < 0wx9
568 :     then yyAction0(strm, yyNO_MATCH)
569 :     else if inp <= 0wxA
570 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
571 :     else yyAction0(strm, yyNO_MATCH)
572 :     else if inp = 0wx20
573 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
574 :     else yyAction0(strm, yyNO_MATCH)
575 :     (* end case *))
576 :     fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm))
577 :     of NONE => yyAction0(strm, yyNO_MATCH)
578 :     | SOME(inp, strm') =>
579 :     if inp = 0wxD
580 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
581 :     else if inp < 0wxD
582 :     then if inp = 0wx9
583 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
584 :     else if inp < 0wx9
585 :     then yyAction0(strm, yyNO_MATCH)
586 :     else if inp <= 0wxA
587 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
588 :     else yyAction0(strm, yyNO_MATCH)
589 :     else if inp = 0wx20
590 :     then yyQ59(strm', yyMATCH(strm, yyAction0, yyNO_MATCH))
591 :     else yyAction0(strm, yyNO_MATCH)
592 :     (* end case *))
593 :     fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm))
594 :     of NONE => yyAction26(strm, yyNO_MATCH)
595 :     | SOME(inp, strm') => yyAction26(strm, yyNO_MATCH)
596 :     (* end case *))
597 :     fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm))
598 :     of NONE =>
599 :     if ULexBuffer.eof(!(yystrm))
600 :     then let
601 :     val yycolno = ref(yygetcolNo(!(yystrm)))
602 :     val yylineno = ref(yygetlineNo(!(yystrm)))
603 :     in
604 :     (case (!(yyss))
605 :     of _ => (UserDeclarations.eof())
606 :     (* end case *))
607 :     end
608 :     else yystuck(lastMatch)
609 :     | SOME(inp, strm') =>
610 :     if inp = 0wx3A
611 :     then yyQ25(strm', lastMatch)
612 :     else if inp < 0wx3A
613 :     then if inp = 0wx22
614 :     then yyQ19(strm', lastMatch)
615 :     else if inp < 0wx22
616 :     then if inp = 0wxD
617 :     then yyQ18(strm', lastMatch)
618 :     else if inp < 0wxD
619 :     then if inp = 0wx9
620 :     then yyQ18(strm', lastMatch)
621 :     else if inp < 0wx9
622 :     then yyQ17(strm', lastMatch)
623 :     else if inp <= 0wxA
624 :     then yyQ18(strm', lastMatch)
625 :     else yyQ17(strm', lastMatch)
626 :     else if inp = 0wx20
627 :     then yyQ18(strm', lastMatch)
628 :     else yyQ17(strm', lastMatch)
629 :     else if inp = 0wx2E
630 :     then yyQ17(strm', lastMatch)
631 :     else if inp < 0wx2E
632 :     then if inp = 0wx2C
633 :     then yyQ20(strm', lastMatch)
634 :     else if inp = 0wx2D
635 :     then yyQ21(strm', lastMatch)
636 :     else yyQ17(strm', lastMatch)
637 :     else if inp = 0wx30
638 :     then yyQ23(strm', lastMatch)
639 :     else if inp = 0wx2F
640 :     then yyQ22(strm', lastMatch)
641 :     else yyQ24(strm', lastMatch)
642 :     else if inp = 0wx6E
643 :     then yyQ29(strm', lastMatch)
644 :     else if inp < 0wx6E
645 :     then if inp = 0wx5D
646 :     then yyQ27(strm', lastMatch)
647 :     else if inp < 0wx5D
648 :     then if inp = 0wx5B
649 :     then yyQ26(strm', lastMatch)
650 :     else yyQ17(strm', lastMatch)
651 :     else if inp = 0wx66
652 :     then yyQ28(strm', lastMatch)
653 :     else yyQ17(strm', lastMatch)
654 :     else if inp = 0wx7B
655 :     then yyQ31(strm', lastMatch)
656 :     else if inp < 0wx7B
657 :     then if inp = 0wx74
658 :     then yyQ30(strm', lastMatch)
659 :     else yyQ17(strm', lastMatch)
660 :     else if inp = 0wx7D
661 :     then yyQ32(strm', lastMatch)
662 :     else yyQ17(strm', lastMatch)
663 :     (* end case *))
664 :     fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm))
665 :     of NONE => yyAction22(strm, yyNO_MATCH)
666 :     | SOME(inp, strm') => yyAction22(strm, yyNO_MATCH)
667 :     (* end case *))
668 :     fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm))
669 :     of NONE => yystuck(lastMatch)
670 :     | SOME(inp, strm') =>
671 :     if inp = 0wx41
672 :     then yyQ16(strm', lastMatch)
673 :     else if inp < 0wx41
674 :     then if inp = 0wx30
675 :     then yyQ16(strm', lastMatch)
676 :     else if inp < 0wx30
677 :     then yystuck(lastMatch)
678 :     else if inp <= 0wx39
679 :     then yyQ16(strm', lastMatch)
680 :     else yystuck(lastMatch)
681 :     else if inp = 0wx61
682 :     then yyQ16(strm', lastMatch)
683 :     else if inp < 0wx61
684 :     then if inp <= 0wx46
685 :     then yyQ16(strm', lastMatch)
686 :     else yystuck(lastMatch)
687 :     else if inp <= 0wx66
688 :     then yyQ16(strm', lastMatch)
689 :     else yystuck(lastMatch)
690 :     (* end case *))
691 :     fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm))
692 :     of NONE => yystuck(lastMatch)
693 :     | SOME(inp, strm') =>
694 :     if inp = 0wx41
695 :     then yyQ15(strm', lastMatch)
696 :     else if inp < 0wx41
697 :     then if inp = 0wx30
698 :     then yyQ15(strm', lastMatch)
699 :     else if inp < 0wx30
700 :     then yystuck(lastMatch)
701 :     else if inp <= 0wx39
702 :     then yyQ15(strm', lastMatch)
703 :     else yystuck(lastMatch)
704 :     else if inp = 0wx61
705 :     then yyQ15(strm', lastMatch)
706 :     else if inp < 0wx61
707 :     then if inp <= 0wx46
708 :     then yyQ15(strm', lastMatch)
709 :     else yystuck(lastMatch)
710 :     else if inp <= 0wx66
711 :     then yyQ15(strm', lastMatch)
712 :     else yystuck(lastMatch)
713 :     (* end case *))
714 :     fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm))
715 :     of NONE => yystuck(lastMatch)
716 :     | SOME(inp, strm') =>
717 :     if inp = 0wx41
718 :     then yyQ14(strm', lastMatch)
719 :     else if inp < 0wx41
720 :     then if inp = 0wx30
721 :     then yyQ14(strm', lastMatch)
722 :     else if inp < 0wx30
723 :     then yystuck(lastMatch)
724 :     else if inp <= 0wx39
725 :     then yyQ14(strm', lastMatch)
726 :     else yystuck(lastMatch)
727 :     else if inp = 0wx61
728 :     then yyQ14(strm', lastMatch)
729 :     else if inp < 0wx61
730 :     then if inp <= 0wx46
731 :     then yyQ14(strm', lastMatch)
732 :     else yystuck(lastMatch)
733 :     else if inp <= 0wx66
734 :     then yyQ14(strm', lastMatch)
735 :     else yystuck(lastMatch)
736 :     (* end case *))
737 :     fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm))
738 :     of NONE => yystuck(lastMatch)
739 :     | SOME(inp, strm') =>
740 :     if inp = 0wx41
741 :     then yyQ13(strm', lastMatch)
742 :     else if inp < 0wx41
743 :     then if inp = 0wx30
744 :     then yyQ13(strm', lastMatch)
745 :     else if inp < 0wx30
746 :     then yystuck(lastMatch)
747 :     else if inp <= 0wx39
748 :     then yyQ13(strm', lastMatch)
749 :     else yystuck(lastMatch)
750 :     else if inp = 0wx61
751 :     then yyQ13(strm', lastMatch)
752 :     else if inp < 0wx61
753 :     then if inp <= 0wx46
754 :     then yyQ13(strm', lastMatch)
755 :     else yystuck(lastMatch)
756 :     else if inp <= 0wx66
757 :     then yyQ13(strm', lastMatch)
758 :     else yystuck(lastMatch)
759 :     (* end case *))
760 :     fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm))
761 :     of NONE => yyAction21(strm, yyNO_MATCH)
762 :     | SOME(inp, strm') => yyAction21(strm, yyNO_MATCH)
763 :     (* end case *))
764 :     fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm))
765 :     of NONE => yyAction20(strm, yyNO_MATCH)
766 :     | SOME(inp, strm') => yyAction20(strm, yyNO_MATCH)
767 :     (* end case *))
768 :     fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm))
769 :     of NONE => yyAction19(strm, yyNO_MATCH)
770 :     | SOME(inp, strm') => yyAction19(strm, yyNO_MATCH)
771 :     (* end case *))
772 :     fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm))
773 :     of NONE => yyAction18(strm, yyNO_MATCH)
774 :     | SOME(inp, strm') => yyAction18(strm, yyNO_MATCH)
775 :     (* end case *))
776 :     fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm))
777 :     of NONE => yyAction17(strm, yyNO_MATCH)
778 :     | SOME(inp, strm') => yyAction17(strm, yyNO_MATCH)
779 :     (* end case *))
780 :     fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm))
781 :     of NONE => yyAction16(strm, yyNO_MATCH)
782 :     | SOME(inp, strm') => yyAction16(strm, yyNO_MATCH)
783 :     (* end case *))
784 :     fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm))
785 :     of NONE => yyAction15(strm, yyNO_MATCH)
786 :     | SOME(inp, strm') => yyAction15(strm, yyNO_MATCH)
787 :     (* end case *))
788 :     fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm))
789 :     of NONE => yystuck(lastMatch)
790 :     | SOME(inp, strm') =>
791 :     if inp = 0wx67
792 :     then yystuck(lastMatch)
793 :     else if inp < 0wx67
794 :     then if inp = 0wx30
795 :     then yystuck(lastMatch)
796 :     else if inp < 0wx30
797 :     then if inp = 0wx23
798 :     then yystuck(lastMatch)
799 :     else if inp < 0wx23
800 :     then if inp = 0wx22
801 :     then yyQ5(strm', lastMatch)
802 :     else yystuck(lastMatch)
803 :     else if inp = 0wx2F
804 :     then yyQ6(strm', lastMatch)
805 :     else yystuck(lastMatch)
806 :     else if inp = 0wx63
807 :     then yystuck(lastMatch)
808 :     else if inp < 0wx63
809 :     then if inp = 0wx62
810 :     then yyQ7(strm', lastMatch)
811 :     else yystuck(lastMatch)
812 :     else if inp = 0wx66
813 :     then yyQ8(strm', lastMatch)
814 :     else yystuck(lastMatch)
815 :     else if inp = 0wx73
816 :     then yystuck(lastMatch)
817 :     else if inp < 0wx73
818 :     then if inp = 0wx6F
819 :     then yystuck(lastMatch)
820 :     else if inp < 0wx6F
821 :     then if inp = 0wx6E
822 :     then yyQ9(strm', lastMatch)
823 :     else yystuck(lastMatch)
824 :     else if inp = 0wx72
825 :     then yyQ10(strm', lastMatch)
826 :     else yystuck(lastMatch)
827 :     else if inp = 0wx75
828 :     then yyQ12(strm', lastMatch)
829 :     else if inp = 0wx74
830 :     then yyQ11(strm', lastMatch)
831 :     else yystuck(lastMatch)
832 :     (* end case *))
833 :     fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm))
834 :     of NONE => yyAction24(strm, yyNO_MATCH)
835 :     | SOME(inp, strm') => yyAction24(strm, yyNO_MATCH)
836 :     (* end case *))
837 :     fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm))
838 :     of NONE => yyAction23(strm, yyNO_MATCH)
839 :     | SOME(inp, strm') =>
840 :     if inp = 0wx23
841 :     then yyQ2(strm', yyMATCH(strm, yyAction23, yyNO_MATCH))
842 :     else if inp < 0wx23
843 :     then if inp = 0wx22
844 :     then yyAction23(strm, yyNO_MATCH)
845 :     else yyQ2(strm', yyMATCH(strm, yyAction23, yyNO_MATCH))
846 :     else if inp = 0wx5C
847 :     then yyAction23(strm, yyNO_MATCH)
848 :     else yyQ2(strm', yyMATCH(strm, yyAction23, yyNO_MATCH))
849 :     (* end case *))
850 :     fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm))
851 :     of NONE =>
852 :     if ULexBuffer.eof(!(yystrm))
853 :     then let
854 :     val yycolno = ref(yygetcolNo(!(yystrm)))
855 :     val yylineno = ref(yygetlineNo(!(yystrm)))
856 :     in
857 :     (case (!(yyss))
858 :     of _ => (UserDeclarations.eof())
859 :     (* end case *))
860 :     end
861 :     else yystuck(lastMatch)
862 :     | SOME(inp, strm') =>
863 :     if inp = 0wx23
864 :     then yyQ2(strm', lastMatch)
865 :     else if inp < 0wx23
866 :     then if inp = 0wx22
867 :     then yyQ3(strm', lastMatch)
868 :     else yyQ2(strm', lastMatch)
869 :     else if inp = 0wx5C
870 :     then yyQ4(strm', lastMatch)
871 :     else yyQ2(strm', lastMatch)
872 :     (* end case *))
873 :     in
874 :     (case (!(yyss))
875 :     of S => yyQ0(!(yystrm), yyNO_MATCH)
876 :     | INITIAL => yyQ1(!(yystrm), yyNO_MATCH)
877 :     (* end case *))
878 :     end
879 :     end
880 :     and skip() = (yystartPos := yygetPos();
881 :     yylastwasnref := ULexBuffer.lastWasNL (!yystrm);
882 :     continue())
883 :     in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end
884 :     in
885 :     lex()
886 :     end
887 :     in
888 :     type pos = AntlrStreamPos.pos
889 :     type span = AntlrStreamPos.span
890 :     type tok = UserDeclarations.lex_result
891 :    
892 :     datatype prestrm = STRM of ULexBuffer.stream *
893 :     (yystart_state * tok * span * prestrm * yystart_state) option ref
894 :     type strm = (prestrm * yystart_state)
895 :    
896 :     fun lex sm
897 :     (STRM (yystrm, memo), ss) = (case !memo
898 :     of NONE => let
899 :     val (tok, span, yystrm', ss') = innerLex
900 :     (yystrm, ss, sm)
901 :     val strm' = STRM (yystrm', ref NONE);
902 :     in
903 :     memo := SOME (ss, tok, span, strm', ss');
904 :     (tok, span, (strm', ss'))
905 :     end
906 :     | SOME (ss', tok, span, strm', ss'') =>
907 :     if ss = ss' then
908 :     (tok, span, (strm', ss''))
909 :     else (
910 :     memo := NONE;
911 :     lex sm
912 :     (STRM (yystrm, memo), ss))
913 :     (* end case *))
914 :    
915 :     fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL)
916 :     fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE),
917 :     INITIAL)
918 :     fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE),
919 :     INITIAL)
920 :    
921 :     fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm
922 :    
923 :     end
924 :     end

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0