Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let parseJson source =
- let rec parseObject (obj:(string*JSON) list) =
- let rec parseMember =
- let rec parseValue =
- let rec parseArray acc = function
- | Token.CloseSBrace::ts -> (JSON.Array acc, ts)
- | (Token.Comma | Token.OpenSBrace)::ts ->
- let (parsed, ts') = parseValue ts
- parseArray (parsed::acc) ts'
- function
- | Token.String str::ts -> (JSON.String str, ts)
- | Token.Number str::ts -> (JSON.Number (int str), ts)
- | Token.True::ts -> (JSON.Boolean true, ts)
- | Token.False::ts -> (JSON.Boolean false, ts)
- | Token.OpenBrace::ts ->
- let (parsed, ts') = parseObject [] (Token.OpenBrace::ts)
- (parsed, ts')
- | Token.OpenSBrace::ts ->
- let (parsed, ts') = parseArray [] (Token.OpenSBrace::ts)
- (parsed, ts')
- | Token.Null::ts -> (JSON.Null, ts)
- function
- | Token.String name::Colon::ts ->
- let (parsed, ts') = parseValue ts
- ((name, parsed), ts')
- function
- | CloseBrace::ts -> (JSON.Object obj, ts)
- | (OpenBrace | Comma)::ts ->
- let (parsed, ts') = parseMember ts
- parseObject (parsed::obj) ts'
- match parseObject [] source with
- res, [] -> res
- | _, _ -> failwith "Mailformed token list"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement