JavaScript parser combinator library