@@ -16,9 +16,11 @@ structure JSONParser : sig
16
16
structure T = JSONTokens
17
17
structure J = JSON
18
18
19
- fun error msg = raise Fail msg
20
-
21
19
fun parse ' (srcMap, inStrm) = let
20
+ fun error (pos, msg, tok) = raise Fail(concat[
21
+ " error " , AntlrStreamPos.spanToString srcMap pos, " : " ,
22
+ msg, " , found '" , JSONTokens.toString tok, " '"
23
+ ])
22
24
val lexer = Lex.lex srcMap
23
25
fun parseValue (strm : Lex.strm) = let
24
26
val (tok, pos, strm) = lexer strm
@@ -32,7 +34,7 @@ structure JSONParser : sig
32
34
| T.INT n => (strm, J.INT n)
33
35
| T.FLOAT f => (strm, J.FLOAT f)
34
36
| T.STRING s => (strm, J.STRING s)
35
- | _ => error " error parsing value"
37
+ | _ => error (pos, " parsing value" , tok)
36
38
(* end case *)
37
39
end
38
40
and parseArray (strm : Lex.strm) = (case lexer strm
@@ -46,7 +48,7 @@ structure JSONParser : sig
46
48
case tok
47
49
of T.RB => (strm, v::items)
48
50
| T.COMMA => loop (strm, v::items)
49
- | _ => error " error parsing array"
51
+ | _ => error (pos, " parsing array" , tok)
50
52
(* end case *)
51
53
end
52
54
val (strm, items) = loop (strm, [])
@@ -62,7 +64,7 @@ structure JSONParser : sig
62
64
in
63
65
SOME (strm, (s, v))
64
66
end
65
- | _ => error " error parsing field"
67
+ | (tok, pos, _) => error (pos, " parsing field" , tok)
66
68
(* end case *) )
67
69
| _ => NONE
68
70
(* end case *) )
@@ -72,7 +74,7 @@ structure JSONParser : sig
72
74
case lexer strm
73
75
of (T.RCB, pos, strm) => (strm, fld::flds)
74
76
| (T.COMMA, pos, strm) => loop (strm, fld::flds)
75
- | _ => error " error parsing object"
77
+ | (tok, pos, _) => error (pos, " parsing object" , tok)
76
78
(* end case *) )
77
79
| NONE => (strm, flds)
78
80
(* end case *) )
0 commit comments