[Haskell-beginners] parsec problem
Christian.Maeder at dfki.de
Sat Oct 13 10:51:09 CEST 2012
the "proper" way is to skip white spaces after each token.
Leading white spaces are skipped only once at the beginning.
lex :: Parser a -> Parser a
lex = (<* spaces) -- skip trailing blanks
sentence = many (lex word) <* lex (oneOf ".?!")
alltext = spaces *> many sentence
Am 12.10.2012 19:20, schrieb Tobias:
> I would like to parse the input "word1 word2 word3 ." into
> ["word1","word2","word3"] using Parsec.
> My code below fails with:
> /> unexpected "."//
> //> expecting letter or digit
> /I guess the problem is that the blank before the dot is considered as
> belonging to the "sepBy word blank" parsing and therefore a next word is
> expected, and it is missing.
> I would like the "sepBy word blank" parsing to stop after "word3".
> How can I do this?
> //sentence :: Parser [String]//
> //sentence = do words <- word `sepBy` blank//
> // blank//
> // oneOf ".?!"//
> // return words//
> //word :: Parser String//
> //word = many1 (letter <|> digit) //
> //blank :: Parser String//
> //blank = string " "
More information about the Beginners