Creating a parser combinator library to parse JSON
Prev: Skipping whitespace | Contents | Next: many1 |
Like the match-literal
parser that manually looks forward in the input stream to see if it matches a literal string, I could write a parser that manually matches JSON number characters in the input stream. What I’d like to do instead is make a many1
parser combinator, which matches one or more instances of something:
(= json-number (many1 json-number-char))
where json-number-char
is a parser that matches one JSON number character:
(= json-number-char (match [find _ ".-+eE1234567890"]))
and match
takes a predicate function. It succeeds, returning the next item in the input, if the function returns true when called with that item:
(def match (f) (only (fn (p) (let x car.p (if (f x) (return cdr.p x))))))
Prev: Skipping whitespace | Contents | Next: many1 |
Questions? Comments? Email me andrew.wilcox [at] gmail.com