
"Claus Reinke"
(b) i like my combinator grammars to be reversible, so that a single grammar specification can be used for both parsing and unparsing/pretty-printing. that means i have to define the details myself anyway.
Oh cool - this is something I have wanted for a long time. Anything released or otherwise available?
about the only thing that spoils this nice setup is error handling. ... so it is easier to see where it is headed: a three-valued logic.
I wrote a set of monadic combinators (the polyparse library) for exactly this reason - improving error messages (in HaXml originally). As indeed, the basic error structure is a three-valued logic, with success and two separate kinds of error: type EitherE a b = Either (Bool,a) b The error categories I used were "recoverable failure", to enable backtracking, and "hard failure" to disallow backtracking when no alternative good parses were possible. The combinator 'commit' changes recoverable failures into hard failures. I guess you could easily model this setup with three continuations instead of a monad. Regards, Malcolm