structure JSONLexer = struct datatype yystart_state = S | INITIAL structure UserDeclarations = struct structure T = JSONTokens type lex_result = T.token fun eof () = T.EOF fun int s = T.INT(valOf(IntInf.fromString s)) fun float s = T.FLOAT(valOf(LargeReal.fromString s)) (* support for incremental construction of strings *) val sbuf : string list ref = ref [] fun addStr s = sbuf := s :: !sbuf fun addUChr lit = let (* trim the "\u" prefix *) val digits = Substring.triml 2 (Substring.full lit) val SOME(w, _) = Word.scan StringCvt.HEX Substring.getc digits in addStr(UTF8.encode w) end fun finishString () = (T.STRING(String.concat(List.rev(!sbuf))) before sbuf := []) end local datatype yymatch = yyNO_MATCH | yyMATCH of ULexBuffer.stream * action * yymatch withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector = Vector.fromList [] fun yystreamify' p input = ULexBuffer.mkStream (p, input) fun yystreamifyReader' p readFn strm = let val s = ref strm fun iter(strm, n, accum) = if n > 1024 then (String.implode (rev accum), strm) else (case readFn strm of NONE => (String.implode (rev accum), strm) | SOME(c, strm') => iter (strm', n+1, c::accum)) fun input() = let val (data, strm) = iter(!s, 0, []) in s := strm; data end in yystreamify' p input end fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm) fun innerLex (yystrm_, yyss_, yysm) = let (* current start state *) val yyss = ref yyss_ fun YYBEGIN ss = (yyss := ss) (* current input stream *) val yystrm = ref yystrm_ fun yysetStrm strm = yystrm := strm fun yygetPos() = ULexBuffer.getpos (!yystrm) fun yystreamify input = yystreamify' (yygetPos()) input fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm (* start position of token -- can be updated via skip() *) val yystartPos = ref (yygetPos()) (* get one char of input *) fun yygetc strm = (case UTF8.getu ULexBuffer.getc strm of (SOME (0w10, s')) => (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); SOME (0w10, s')) | x => x) fun yygetList getc strm = let val get1 = UTF8.getu getc fun iter (strm, accum) = (case get1 strm of NONE => rev accum | SOME (w, strm') => iter (strm', w::accum) (* end case *)) in iter (strm, []) end (* create yytext *) fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm) fun yymktext(strm) = Substring.string (yymksubstr strm) fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm) open UserDeclarations fun lex () = let fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state" | yystuck (yyMATCH (strm, action, old)) = action (strm, old) val yypos = yygetPos() fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm) fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm) fun yyactsToMatches (strm, [], oldMatches) = oldMatches | yyactsToMatches (strm, act::acts, oldMatches) = yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) fun yygo actTable = (fn (~1, _, oldMatches) => yystuck oldMatches | (curState, strm, oldMatches) => let val (transitions, finals') = Vector.sub (yytable, curState) val finals = map (fn i => Vector.sub (actTable, i)) finals' fun tryfinal() = yystuck (yyactsToMatches (strm, finals, oldMatches)) fun find (c, []) = NONE | find (c, (c1, c2, s)::ts) = if c1 <= c andalso c <= c2 then SOME s else find (c, ts) in case yygetc strm of SOME(c, strm') => (case find (c, transitions) of NONE => tryfinal() | SOME n => yygo actTable (n, strm', yyactsToMatches (strm, finals, oldMatches))) | NONE => tryfinal() end) val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm)) fun continue() = let val yylastwasn = !yylastwasnref in let fun yyAction0 (strm, lastMatch : yymatch) = (yystrm := strm; skip() ) fun yyAction1 (strm, lastMatch : yymatch) = (yystrm := strm; T.LCB ) fun yyAction2 (strm, lastMatch : yymatch) = (yystrm := strm; T.RCB ) fun yyAction3 (strm, lastMatch : yymatch) = (yystrm := strm; T.LB ) fun yyAction4 (strm, lastMatch : yymatch) = (yystrm := strm; T.RB ) fun yyAction5 (strm, lastMatch : yymatch) = (yystrm := strm; T.COMMA ) fun yyAction6 (strm, lastMatch : yymatch) = (yystrm := strm; T.COLON ) fun yyAction7 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_null ) fun yyAction8 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_true ) fun yyAction9 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_false ) fun yyAction10 (strm, lastMatch : yymatch) = let val yytext = yymktext(strm) in yystrm := strm; T.INT(valOf(IntInf.fromString yytext)) end fun yyAction11 (strm, lastMatch : yymatch) = let val yytext = yymktext(strm) in yystrm := strm; float yytext end fun yyAction12 (strm, lastMatch : yymatch) = let val yytext = yymktext(strm) in yystrm := strm; float yytext end fun yyAction13 (strm, lastMatch : yymatch) = let val yytext = yymktext(strm) in yystrm := strm; float yytext end fun yyAction14 (strm, lastMatch : yymatch) = (yystrm := strm; YYBEGIN S; continue() ) fun yyAction15 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\\"; continue() ) fun yyAction16 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\""; continue() ) fun yyAction17 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "/"; continue() ) fun yyAction18 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\b"; continue() ) fun yyAction19 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\f"; continue() ) fun yyAction20 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\n"; continue() ) fun yyAction21 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\r"; continue() ) fun yyAction22 (strm, lastMatch : yymatch) = (yystrm := strm; addStr "\t"; continue() ) fun yyAction23 (strm, lastMatch : yymatch) = let val yytext = yymktext(strm) in yystrm := strm; addUChr yytext; continue() end fun yyAction24 (strm, lastMatch : yymatch) = let val yytext = yymktext(strm) in yystrm := strm; addStr yytext; continue() end fun yyAction25 (strm, lastMatch : yymatch) = (yystrm := strm; YYBEGIN INITIAL; finishString() ) fun yyAction26 (strm, lastMatch : yymatch) = (yystrm := strm; skip() ) fun yyAction27 (strm, lastMatch : yymatch) = (yystrm := strm; skip() ) fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction2(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction2(strm, yyNO_MATCH) (* end case *)) fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction1(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction1(strm, yyNO_MATCH) (* end case *)) fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction8(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction8(strm, yyNO_MATCH) (* end case *)) fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx65 then yyQ36(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx75 then yyQ35(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction27(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx72 then yyQ34(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else yyAction27(strm, yyNO_MATCH) (* end case *)) fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction7(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH) (* end case *)) fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx6C then yyQ39(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx6C then yyQ38(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction27(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx75 then yyQ37(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else yyAction27(strm, yyNO_MATCH) (* end case *)) fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction9(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH) (* end case *)) fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx65 then yyQ43(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx73 then yyQ42(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx6C then yyQ41(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction27(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx61 then yyQ40(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else yyAction27(strm, yyNO_MATCH) (* end case *)) fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction4(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH) (* end case *)) fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction3(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction3(strm, yyNO_MATCH) (* end case *)) fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction6(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH) (* end case *)) fun yyQ48 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction12(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx30 then yyQ48(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) else if inp < 0wx30 then yyAction12(strm, yyNO_MATCH) else if inp <= 0wx39 then yyQ48(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) else yyAction12(strm, yyNO_MATCH) (* end case *)) fun yyQ47 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx30 then yyQ48(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ48(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx2D then yyQ47(strm', lastMatch) else if inp < 0wx2D then if inp = 0wx2B then yyQ47(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx30 then yyQ48(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ48(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ52 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction13(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx30 then yyQ52(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) else if inp < 0wx30 then yyAction13(strm, yyNO_MATCH) else if inp <= 0wx39 then yyQ52(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) else yyAction13(strm, yyNO_MATCH) (* end case *)) fun yyQ51 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx30 then yyQ52(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ52(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ50 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx2D then yyQ51(strm', lastMatch) else if inp < 0wx2D then if inp = 0wx2B then yyQ51(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx30 then yyQ52(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ52(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ49 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction11(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx45 then yyQ50(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) else if inp < 0wx45 then if inp = 0wx30 then yyQ49(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) else if inp < 0wx30 then yyAction11(strm, yyNO_MATCH) else if inp <= 0wx39 then yyQ49(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) else yyAction11(strm, yyNO_MATCH) else if inp = 0wx65 then yyQ50(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) else yyAction11(strm, yyNO_MATCH) (* end case *)) fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx30 then yyQ49(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ49(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction10(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx3A then yyAction10(strm, yyNO_MATCH) else if inp < 0wx3A then if inp = 0wx2F then yyAction10(strm, yyNO_MATCH) else if inp < 0wx2F then if inp = 0wx2E then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else if inp = 0wx46 then yyAction10(strm, yyNO_MATCH) else if inp < 0wx46 then if inp = 0wx45 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else if inp = 0wx65 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) (* end case *)) fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction10(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx3A then yyAction10(strm, yyNO_MATCH) else if inp < 0wx3A then if inp = 0wx2F then yyAction10(strm, yyNO_MATCH) else if inp < 0wx2F then if inp = 0wx2E then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else if inp = 0wx46 then yyAction10(strm, yyNO_MATCH) else if inp < 0wx46 then if inp = 0wx45 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else if inp = 0wx65 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) (* end case *)) fun yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction10(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx45 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else if inp < 0wx45 then if inp = 0wx2E then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else if inp = 0wx65 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) (* end case *)) fun yyQ57 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx2A then yyQ57(strm', lastMatch) else yyQ56(strm', lastMatch) (* end case *)) and yyQ56 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx2A then yyQ57(strm', lastMatch) else yyQ56(strm', lastMatch) (* end case *)) fun yyQ55 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction26(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx2A then yyQ57(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) else yyQ56(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) (* end case *)) fun yyQ53 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx2A then yyQ54(strm', lastMatch) else yyQ53(strm', lastMatch) (* end case *)) and yyQ54 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx2B then yyQ53(strm', lastMatch) else if inp < 0wx2B then if inp = 0wx2A then yyQ54(strm', lastMatch) else yyQ53(strm', lastMatch) else if inp = 0wx2F then yyQ55(strm', lastMatch) else yyQ53(strm', lastMatch) (* end case *)) fun yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction27(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx2A then yyQ53(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else yyAction27(strm, yyNO_MATCH) (* end case *)) fun yyQ59 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction10(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx3A then yyAction10(strm, yyNO_MATCH) else if inp < 0wx3A then if inp = 0wx2F then yyAction10(strm, yyNO_MATCH) else if inp < 0wx2F then if inp = 0wx2E then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else if inp = 0wx46 then yyAction10(strm, yyNO_MATCH) else if inp < 0wx46 then if inp = 0wx45 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else if inp = 0wx65 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) (* end case *)) fun yyQ58 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction10(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx45 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else if inp < 0wx45 then if inp = 0wx2E then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) else if inp = 0wx65 then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) else yyAction10(strm, yyNO_MATCH) (* end case *)) fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction27(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx31 then yyQ59(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else if inp < 0wx31 then if inp = 0wx30 then yyQ58(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else yyAction27(strm, yyNO_MATCH) else if inp <= 0wx39 then yyQ59(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) else yyAction27(strm, yyNO_MATCH) (* end case *)) fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction5(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) (* end case *)) fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction14(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction14(strm, yyNO_MATCH) (* end case *)) fun yyQ60 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction0(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wxD then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else if inp < 0wxD then if inp = 0wx9 then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else if inp < 0wx9 then yyAction0(strm, yyNO_MATCH) else if inp <= 0wxA then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else yyAction0(strm, yyNO_MATCH) else if inp = 0wx20 then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else yyAction0(strm, yyNO_MATCH) (* end case *)) fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction0(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wxD then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else if inp < 0wxD then if inp = 0wx9 then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else if inp < 0wx9 then yyAction0(strm, yyNO_MATCH) else if inp <= 0wxA then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else yyAction0(strm, yyNO_MATCH) else if inp = 0wx20 then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) else yyAction0(strm, yyNO_MATCH) (* end case *)) fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction27(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction27(strm, yyNO_MATCH) (* end case *)) fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => if ULexBuffer.eof(!(yystrm)) then let val yycolno = ref(yygetcolNo(!(yystrm))) val yylineno = ref(yygetlineNo(!(yystrm))) in (case (!(yyss)) of _ => (UserDeclarations.eof()) (* end case *)) end else yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx3A then yyQ26(strm', lastMatch) else if inp < 0wx3A then if inp = 0wx22 then yyQ20(strm', lastMatch) else if inp < 0wx22 then if inp = 0wxD then yyQ19(strm', lastMatch) else if inp < 0wxD then if inp = 0wx9 then yyQ19(strm', lastMatch) else if inp < 0wx9 then yyQ18(strm', lastMatch) else if inp <= 0wxA then yyQ19(strm', lastMatch) else yyQ18(strm', lastMatch) else if inp = 0wx20 then yyQ19(strm', lastMatch) else yyQ18(strm', lastMatch) else if inp = 0wx2E then yyQ18(strm', lastMatch) else if inp < 0wx2E then if inp = 0wx2C then yyQ21(strm', lastMatch) else if inp = 0wx2D then yyQ22(strm', lastMatch) else yyQ18(strm', lastMatch) else if inp = 0wx30 then yyQ24(strm', lastMatch) else if inp = 0wx2F then yyQ23(strm', lastMatch) else yyQ25(strm', lastMatch) else if inp = 0wx6E then yyQ30(strm', lastMatch) else if inp < 0wx6E then if inp = 0wx5D then yyQ28(strm', lastMatch) else if inp < 0wx5D then if inp = 0wx5B then yyQ27(strm', lastMatch) else yyQ18(strm', lastMatch) else if inp = 0wx66 then yyQ29(strm', lastMatch) else yyQ18(strm', lastMatch) else if inp = 0wx7B then yyQ32(strm', lastMatch) else if inp < 0wx7B then if inp = 0wx74 then yyQ31(strm', lastMatch) else yyQ18(strm', lastMatch) else if inp = 0wx7D then yyQ33(strm', lastMatch) else yyQ18(strm', lastMatch) (* end case *)) fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction23(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction23(strm, yyNO_MATCH) (* end case *)) fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx41 then yyQ17(strm', lastMatch) else if inp < 0wx41 then if inp = 0wx30 then yyQ17(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ17(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx61 then yyQ17(strm', lastMatch) else if inp < 0wx61 then if inp <= 0wx46 then yyQ17(strm', lastMatch) else yystuck(lastMatch) else if inp <= 0wx66 then yyQ17(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx41 then yyQ16(strm', lastMatch) else if inp < 0wx41 then if inp = 0wx30 then yyQ16(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ16(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx61 then yyQ16(strm', lastMatch) else if inp < 0wx61 then if inp <= 0wx46 then yyQ16(strm', lastMatch) else yystuck(lastMatch) else if inp <= 0wx66 then yyQ16(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx41 then yyQ15(strm', lastMatch) else if inp < 0wx41 then if inp = 0wx30 then yyQ15(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ15(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx61 then yyQ15(strm', lastMatch) else if inp < 0wx61 then if inp <= 0wx46 then yyQ15(strm', lastMatch) else yystuck(lastMatch) else if inp <= 0wx66 then yyQ15(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx41 then yyQ14(strm', lastMatch) else if inp < 0wx41 then if inp = 0wx30 then yyQ14(strm', lastMatch) else if inp < 0wx30 then yystuck(lastMatch) else if inp <= 0wx39 then yyQ14(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx61 then yyQ14(strm', lastMatch) else if inp < 0wx61 then if inp <= 0wx46 then yyQ14(strm', lastMatch) else yystuck(lastMatch) else if inp <= 0wx66 then yyQ14(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction22(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction22(strm, yyNO_MATCH) (* end case *)) fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction21(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction21(strm, yyNO_MATCH) (* end case *)) fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction20(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction20(strm, yyNO_MATCH) (* end case *)) fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction19(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction19(strm, yyNO_MATCH) (* end case *)) fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction18(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction18(strm, yyNO_MATCH) (* end case *)) fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction15(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction15(strm, yyNO_MATCH) (* end case *)) fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction17(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction17(strm, yyNO_MATCH) (* end case *)) fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction16(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction16(strm, yyNO_MATCH) (* end case *)) fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx66 then yyQ9(strm', lastMatch) else if inp < 0wx66 then if inp = 0wx30 then yystuck(lastMatch) else if inp < 0wx30 then if inp = 0wx23 then yystuck(lastMatch) else if inp < 0wx23 then if inp = 0wx22 then yyQ5(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx2F then yyQ6(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx5D then yystuck(lastMatch) else if inp < 0wx5D then if inp = 0wx5C then yyQ7(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx62 then yyQ8(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx73 then yystuck(lastMatch) else if inp < 0wx73 then if inp = 0wx6F then yystuck(lastMatch) else if inp < 0wx6F then if inp = 0wx6E then yyQ10(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx72 then yyQ11(strm', lastMatch) else yystuck(lastMatch) else if inp = 0wx75 then yyQ13(strm', lastMatch) else if inp = 0wx74 then yyQ12(strm', lastMatch) else yystuck(lastMatch) (* end case *)) fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction25(strm, yyNO_MATCH) | SOME(inp, strm') => yyAction25(strm, yyNO_MATCH) (* end case *)) fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => yyAction24(strm, yyNO_MATCH) | SOME(inp, strm') => if inp = 0wx23 then yyQ2(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) else if inp < 0wx23 then if inp = 0wx22 then yyAction24(strm, yyNO_MATCH) else yyQ2(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) else if inp = 0wx5C then yyAction24(strm, yyNO_MATCH) else yyQ2(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) (* end case *)) fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) of NONE => if ULexBuffer.eof(!(yystrm)) then let val yycolno = ref(yygetcolNo(!(yystrm))) val yylineno = ref(yygetlineNo(!(yystrm))) in (case (!(yyss)) of _ => (UserDeclarations.eof()) (* end case *)) end else yystuck(lastMatch) | SOME(inp, strm') => if inp = 0wx23 then yyQ2(strm', lastMatch) else if inp < 0wx23 then if inp = 0wx22 then yyQ3(strm', lastMatch) else yyQ2(strm', lastMatch) else if inp = 0wx5C then yyQ4(strm', lastMatch) else yyQ2(strm', lastMatch) (* end case *)) in (case (!(yyss)) of S => yyQ0(!(yystrm), yyNO_MATCH) | INITIAL => yyQ1(!(yystrm), yyNO_MATCH) (* end case *)) end end and skip() = (yystartPos := yygetPos(); yylastwasnref := ULexBuffer.lastWasNL (!yystrm); continue()) in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end in lex() end in type pos = AntlrStreamPos.pos type span = AntlrStreamPos.span type tok = UserDeclarations.lex_result datatype prestrm = STRM of ULexBuffer.stream * (yystart_state * tok * span * prestrm * yystart_state) option ref type strm = (prestrm * yystart_state) fun lex sm (STRM (yystrm, memo), ss) = (case !memo of NONE => let val (tok, span, yystrm', ss') = innerLex (yystrm, ss, sm) val strm' = STRM (yystrm', ref NONE); in memo := SOME (ss, tok, span, strm', ss'); (tok, span, (strm', ss')) end | SOME (ss', tok, span, strm', ss'') => if ss = ss' then (tok, span, (strm', ss'')) else ( memo := NONE; lex sm (STRM (yystrm, memo), ss)) (* end case *)) fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL) fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE), INITIAL) fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE), INITIAL) fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm end end