Parsec lexeme parsers and whitespace/eol characters

Hi, I'm working with expressions in which I use parsec libraries lexeme parsers: identifier, integer, whiteSpace etc. I am attempting to parse haskell declarations and I am facing some difficulty when trying to delimit the declarations which span multiple lines using eol character for some reason ( I am led to believe is due to the removal of whitespace with lexemes ) data Express = Seq [Express] | ID String | Num Integer | BoolConst Bool | EmptyList String seqOfExpr8 = do list <- (sepBy1 expr8 eol) return $ if length list == 1 then head list else Seq list where Seq list is a data declaration for a list of expression8's The parser works correctly unless trying to parse a lexeme parser token such as an identifier. Upon reading a lexeme token the parser will stop and output all tokens up until and including that token but no tokens past it. Also when trying to separate declarations that span multiple lines, does anyone have an idea on how to achieve this? I have been thinking that the parser should ignore any end line characters that are followed by whitespace ( as whitespace is used in Haskell layout rules ) Any thoughts on how I might solve this would be greatly appreciated! Seán

Hi Sean, I haven't read your entire message carefully, but I read "I am attempting to parse Haskell declarations" and I would like to ask: is there a reason you cannot/do not want to use the 'haskell-src-exts' package? -Brent On Sat, Mar 02, 2013 at 04:57:14PM +0000, Sean Cormican wrote:
Hi,
I'm working with expressions in which I use parsec libraries lexeme parsers: identifier, integer, whiteSpace etc.
I am attempting to parse haskell declarations and I am facing some difficulty when trying to delimit the declarations which span multiple lines using eol character for some reason ( I am led to believe is due to the removal of whitespace with lexemes )
data Express = Seq [Express] | ID String | Num Integer | BoolConst Bool | EmptyList String
seqOfExpr8 = do list <- (sepBy1 expr8 eol) return $ if length list == 1 then head list else Seq list
where Seq list is a data declaration for a list of expression8's
The parser works correctly unless trying to parse a lexeme parser token such as an identifier. Upon reading a lexeme token the parser will stop and output all tokens up until and including that token but no tokens past it.
Also when trying to separate declarations that span multiple lines, does anyone have an idea on how to achieve this? I have been thinking that the parser should ignore any end line characters that are followed by whitespace ( as whitespace is used in Haskell layout rules )
Any thoughts on how I might solve this would be greatly appreciated!
Seán
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
Brent Yorgey
-
Sean Cormican