[Haskell-cafe] parsec manyTill stack overflow
Jonathan Cast
jonathanccast at fastmail.fm
Fri Jul 4 18:29:33 EDT 2008
On Fri, 2008-07-04 at 15:15 -0700, Badea Daniel wrote:
> The file I'm trying to parse contains mixed sections like:
>
> ...
>
> <start_section=
>
> ... script including arithmetic expressions ...
>
> /end_section>
>
> ...
>
> so I defined two parsers: one for the 'outer' language and
> the other one for the 'inner' language. I used (manyTill
> inner_parser end_section_parser)
Does inner_parser (or a parser it calls) recognize `/end_section'? If
not, I don't think you actually need manyTill. If so, that's more
difficult. Two thoughts:
* This design looks vaguely XML-ish; is it possible to use a two-stage
parser, recognizing but not parsing the arithmetic expressions and then
looping back over the parse tree later?
* If the part of inner_parser that would recognize /end_section
(presumably as a division operator followed by an identifier?) is well
isolated, you could locally exclude it there; e.g., instead of
divison_operator = operator "/"
say
division_operatory = try $ do
satisfy (=='/')
notFollowedBy (string "end_section")
whitespace
(Or reverse the order or notFollowedBy and whitespace).
jcc
More information about the Haskell-Cafe
mailing list