[Haskell-cafe] Parsec question

Michael Mossey mpm at alumni.caltech.edu
Fri Apr 17 05:15:13 EDT 2009


My confusion is that text is by definition followed by // or eof.


minh thu wrote:
> You can use 'notFollowedBy' (probably with 'many1' and 'try').
> Something like (untested):
> 
> notFollowedBy (try $ string "//")
> 
> Thu
> 
> 2009/4/17 Michael Mossey <mpm at alumni.caltech.edu>:
>> Here's what I've got so far.
>>
>> -- Text is considered everything up to //. However, the problem
>> -- is that this consumes the //.
>> parseText = manyTill anyChar (try (string "//"))
>>
>> -- Because the // is already consumed, parseKeyword just grabs
>> -- the available letters.
>> parseKeyword :: Parser String
>> parseKeyword = many1 letter
>>
>>
>>
>>
>> -- Test function.
>> parseSome = do t1 <- parseText
>>               k1 <- parseKeyword
>>               t2 <- parseText
>>               return (t1,k1,t2)
>>
>> On "some text//keyword more text//" this gives
>>
>> ("some text","keyword"," more text")
>>
>> On "some text//keyword more text"
>>
>> this gives the error "expecting //"
>>
>> I wonder how I can get the manyTill to be happy with eof before finding the
>> //? I tried
>>
>> parseText = manyTill anyChar (try (string "//") <|> eof)
>>
>> but got a type error.
>>
>>
>> minh thu wrote:
>>> 2009/4/17 Michael P Mossey <mpm at alumni.caltech.edu>:
>>>> I want to write a parser that can read a file with this format: the file
>>>> has
>>>> sections which are demarcated by keywords. Keywords always begin with two
>>>> forward slashes and consist of letters, digits, and underscore. The text
>>>> can
>>>> be anything, including special characters. For instance:
>>>>
>>>>
>>>> //keyword some text
>>>> and more text //another_keyword and) some { more text
>>>> //ya_keyword $$
>>>> -- text
>>>>
>>>>
>>>> I'm not sure how to write a parser that considers anything but a double
>>>> slash to be a valid part of the text.
>>> Maybe you can use a combination of 'many', 'noneOf' or 'manyTill' ?
>>>
>>> Cheers,
>>> Thu
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>


More information about the Haskell-Cafe mailing list