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

SCM Repository

[smlnj] Diff of /smlnj-lib/trunk/JSON/json-stream-parser.sml
ViewVC logotype

Diff of /smlnj-lib/trunk/JSON/json-stream-parser.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3003, Wed Apr 23 13:32:55 2008 UTC revision 3004, Wed Apr 23 21:58:57 2008 UTC
# Line 24  Line 24 
24    
25    end = struct    end = struct
26    
27        structure Lex = JSONLexer
28        structure T = JSONTokens
29    
30    (* callback functions for the different parsing events *)    (* callback functions for the different parsing events *)
31      type 'ctx callbacks = {      type 'ctx callbacks = {
32          null : 'ctx -> 'ctx,          null : 'ctx -> 'ctx,
# Line 38  Line 41 
41          endArray : 'ctx -> 'ctx          endArray : 'ctx -> 'ctx
42        }        }
43    
44      fun parser _ _ = raise Fail "unimplemented"      fun parser cb (inStrm, ctx) = let
45              val lexer = Lex.lex srcMap
46              fun parseValue (strm, ctx) = let
47                    val (tok, pos, strm) = lexer strm
48                    in
49                      case tok
50                       of T.LB => parseArray strm
51                        | T.LCB => parseObject strm
52                        | T.KW_null => (strm, #null cb ctx)
53                        | T.KW_true => (strm, #boolean cb (ctx, true))
54                        | T.KW_false => (strm, #boolean cb (ctx, false))
55                        | T.INT n => (strm, #integer cb (ctx, n))
56                        | T.FLOAT f => (strm, #float cb (ctx, f))
57                        | T.STRING s => (strm, #string cb (ctx, s))
58                        | _ => (* error *)
59                      (* end case *)
60                    end
61              and parseArray (strm, ctx) = let
62                    fun loop (strm, ctx) = let
63                          val (strm, ctx) = parseValue (strm, ctx)
64                        (* expect either a "," or a "]" *)
65                          val (tok, pos, strm) = lexer strm
66                          in
67                            case tok
68                             of T.RB => (strm, ctx)
69                              | T.COMMA => loop (strm, ctx)
70                              | _ => (* error *)
71                            (* end case *)
72                          end
73                    val (strm, ctx) = loop (strm, #startArray cb ctx)
74                    in
75                      (strm, #endArray ctx)
76                    end
77              and parseObject (strm, ctx) = let
78                    fun loop (strm, ctx) = let
79    (* expect STRING COLON value ("," or "}") *)
80                          val (tok, pos, strm) = lexer strm
81                          in
82                            case tok
83                             of T.EOF =>
84                              | T.LB =>
85                              | T.RB =>
86                              | T.LCB =>
87                              | T.RCB =>
88                              | T.COMMA =>
89                              | T.COLON =>
90                              | T.KW_null =>
91                              | T.KW_true =>
92                              | T.KW_false =>
93                              | T.INT n =>
94                              | T.FLOAT f =>
95                              | T.STRING s =>
96                            (* end case *)
97                          end
98                    val (strm, ctx) = loop (strm, #startObject cb ctx)
99                    in
100                      (strm, #endObject ctx)
101                    end
102              in
103                parseValue (Lex.streamifyInstream inStrm, ctx)
104              end
105    
106    end    end

Legend:
Removed from v.3003  
changed lines
  Added in v.3004

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