0 | module Language.JSON.Lexer
2 | import Language.JSON.String
5 | import public Language.JSON.Tokens
13 | whole = is '0' <|> range '1' '9' <+> many digit
14 | frac = is '.' <+> digits
15 | exp = like 'e' <+> opt (oneOf "+-") <+> digits in
16 | opt sign <+> whole <+> opt frac <+> opt exp
19 | jsonTokenMap : TokenMap JSONToken
20 | jsonTokenMap = toTokenMap $
21 | [ (spaces, JTIgnore)
22 | , (is ',', JTPunct Comma)
23 | , (is ':', JTPunct Colon)
24 | , (is '[', JTPunct $
Square Open)
25 | , (is ']', JTPunct $
Square Close)
26 | , (is '{', JTPunct $
Curly Open)
27 | , (is '}', JTPunct $
Curly Close)
28 | , (exact "null", JTNull)
29 | , (exact strTrue <|> exact strFalse, JTBoolean)
30 | , (numberLit, JTNumber)
31 | , (permissiveStringLit, JTString)
35 | lexJSON : String -> Maybe (List (WithBounds JSONToken))
37 | = case lex jsonTokenMap str of
38 | (tokens, _, _, "") => Just $
tokens