Hi all,
This might be a Lexi question, but perhaps someone else will have some insight as well.
I'm wrestling with how to get errors to propagate down in megaparsack. For example:
(define convert/p
(do (string/p "convert")
...
[assigns ← (many/p #:min 0
assignment-statement/p
)]
...
(pure ...)))
(Assume I have a bunch of other parsing bits around the call to `assignment-statement/p`.)
Currently, if I have a malformed assignment statement, the error is at the top level of `convert`. `convert/p` is part of a backtracking conditional:
(define conversion/p
(do
[result ← (many/p (or/p (try/p base-type/p)
(try/p convert/p)
(try/p chain/p)
)
#:sep space0+/p
)]
eof/p
(pure result)))
What should I do to get the error to report/fail down the parse tree, as opposed to the top? I would rather know that there's something wrong down in my assignment statement, as opposed to getting an error that "c" was unexpected (because the entire conversion/p failed on account of an error somewhere down inside).
I need to give the docs a more careful read, but I thought I'd ask, as it seems both simple and, given the nature of the parsing tools, possibly subtle.
Many thanks,
Matt